Compare commits

..

1 Commits

Author SHA1 Message Date
88816d9a74 Stratus own Qual
Common ResourceID and IsViewerFile

Test data and vba
2025-05-27 15:29:14 -07:00
70 changed files with 8665 additions and 4549 deletions

1
.gitignore vendored
View File

@ -1,3 +1,4 @@
LSL2/STPROC/TEST_DANIEL*.txt LSL2/STPROC/TEST_DANIEL*.txt
LSL2/STPROC/TEST_DAKOTA.txt LSL2/STPROC/TEST_DAKOTA.txt
LSL2/STPROC/JONATHAN_SERVICES.txt LSL2/STPROC/JONATHAN_SERVICES.txt
.vscode/**/*.png

234
.vscode/.txt vendored Normal file
View File

@ -0,0 +1,234 @@
// T:\met08resisrp2100\06_SourceCode\met08resisrp2100\Adaptation\FileHandlers\OpenInsight\FileRead.cs
// x.Date // 001
// x.Employee // 002
// x.Recipe // 003
// x.Reactor // 004
// x.RDS // 005
// x.PSN // 006
// x.Layer // 007
// x.Zone // 008
// T:\met08anlysdifaast230\06_SourceCode\met08anlysdifaast230\Adaptation\FileHandlers\OpenInsight\FileRead.cs
// x.PSN // 001
// x.Reactor // 002
// logistics.MesEntity // 003
// x.RDS // 004
// x.Recipe // 005
// x.Employee // 006
// x.SlotNumber // 007
// T:\met08thftirstratus\06_SourceCode\met08thftirstratus\Adaptation\FileHandlers\OpenInsight\FileRead.cs
// "Stratus_" // 001
// x.Date // 002
// logistics.JobID // 003
// "FQA Thickness" // 004
// x.Employee // 005
// x.Recipe // 006
// x.Reactor // 007
// x.RDS // 008
// x.PSN // 009
// x.Lot // 010
// x.Cassette // 011
// x.MeanThickness // 012
// descriptions[i].Slot // 013
// descriptions[i].Mean // 014
// T:\met08thftirqs408m\06_SourceCode\met08thftirqs408m\Adaptation\FileHandlers\OpenInsight\FileRead.cs
// Bio-Rad UniqueId // 001
// Date // 002
// ThicknessFourteenCriticalPointsAverage // 003
// Recipe // 004
// Reactor // 005
// RDS // 006
// PSN // 007
// Layer // 008
// Zone // 009
// Cassette // 010
// Wafer // 011
// RVThickness // 012
// Position // 013
// Thickness // 014
// T:\met08resimapcde\06_SourceCode\met08resimapcde\Adaptation\FileHandlers\OpenInsight\FileRead.cs
// x.UniqueId // 001
// x.Run // 002
// x.Date // 003
// x.Lot // 004
// x.Recipe // 005
// x.Reactor // 006
// x.RDS // 007
// x.PSN // 008
// x.Layer // 009
// x.Zone // 010
// logistics.MesEntity // 011
// x.Employee // 012
// x.Engineer // 013
// x.DLRatio // 014
// x.Temp // 015
// x.AutoOptimizeGain // 016
// x.AutoProbeHeightSet // 017
// x.DataReject // 018
// x.FileName // 019
// x.Avg // 020
// x.StdDev // 021
// x.SemiRadial // 022
// description.Pt // 023
// description.R // 024
// description.T // 025
// description.Rs // 026
// description.Merit // 027
// T:\met08resihgcv\06_SourceCode\met08resihgcv\Adaptation\FileHandlers\OpenInsight\FileRead.cs
// x.UniqueId // 001
// logistics.MesEntity // 002
// x.Reactor // 003
// x.RDS // 004
// x.PSN // 005
// x.Layer // 006
// x.Zone // 007
// x.Wafer // 008
// x.Lot // 009
// x.Plan // 010
// x.Date // 011
// x.WaferSize // 012
// x.Ccomp // 013
// x.Area // 014
// x.CondType // 015
// x.Model // 016
// x.StartVoltage // 017
// x.StopVoltage // 018
// x.RampRate // 019
// x.GLimit // 020
// x.SetupFile // 021
// x.SetupFile // 022
// x.Folder // 023
// x.Pattern // 024
// x.RhoMethod // 025
// x.NAvgMean // 026
// x.NAvgStdDev // 027
// x.NAvgRadialGradient // 028
// x.NslMean // 029
// x.NslStdDev // 030
// x.NslRadialGradient // 031
// x.VdMean // 032
// x.VdStdDev // 033
// x.VdRadialGradient // 034
// x.FlatZMean // 035
// x.FlatZStdDev // 036
// x.FlatZRadialGradient // 037
// x.RhoAvgMean // 038
// x.RhoAvgStdDev // 039
// x.RhoAvgRadialGradient // 040
// x.RhoslMean // 041
// x.RhoslStdDev // 042
// x.RhoslRadialGradient // 043
// x.PhaseMean // 044
// x.PhaseStdDev // 045
// x.PhaseRadialGradient // 046
// x.GradeMean // 047
// x.GradeStdDev // 048
// x.GradeRadialGradient // 049
// x.RsMean // 050
// x.RsStdDev // 051
// x.RsRadialGradient // 052
// description.Index // 053
// description.NAvg // 054
// description.Nsl // 055
// description.Vd // 056
// description.FlatZ // 057
// description.RhoAvg // 058
// description.Rhosl // 059
// description.Phase // 060
// description.Grade // 061
// T:\met08ddupsfs6420\06_SourceCode\met08ddupsfs6420\Adaptation\FileHandlers\OpenInsight\FileRead.cs
// x.AreaCountAvg // 001 - AreaCountAvg
// x.AreaCountMax // 002 - AreaCountMax
// x.AreaCountMin // 003 - AreaCountMin
// x.AreaCountStdDev // 004 - AreaCountStdDev
// x.AreaTotalAvg // 005 - AreaTotalAvg
// x.AreaTotalMax // 006 - AreaTotalMax
// x.AreaTotalMin // 007 - AreaTotalMin
// x.AreaTotalStdDev // 008 - AreaTotalStdDev
// x.Date // 009 -
// x.HazeAverageAvg // 010 - Haze Average
// x.HazeAverageMax // 011 -
// x.HazeAverageMin // 012 -
// x.HazeAverageStdDev // 013 -
// x.HazeRegionAvg // 014 -
// x.HazeRegionMax // 015 -
// x.HazeRegionMin // 016 -
// x.HazeRegionStdDev // 017 -
// x.Lot // 018 -
// x.LPDCM2Avg // 019 -
// x.LPDCM2Max // 020 -
// x.LPDCM2Min // 021 -
// x.LPDCM2StdDev // 022 -
// x.LPDCountAvg // 023 -
// x.LPDCountMax // 024 -
// x.LPDCM2Min // 025 -
// x.LPDCountStdDev // 026 -
// x.Employee // 027 -
// x.RDS // 028 - Lot
// x.Reactor // 029 - Process
// x.Recipe // 030 - Part
// x.ScratchCountAvg // 031 - Scratch Count
// x.ScratchCountMax // 032 -
// x.ScratchCountMin // 033 -
// x.ScratchTotalStdDev // 034 -
// x.ScratchTotalAvg // 035 - Scratch Length
// x.ScratchTotalMax // 036 -
// x.ScratchTotalMin // 037 -
// x.ScratchTotalStdDev // 038 -
// x.SumOfDefectsAvg // 039 - Average Sum of Defects
// x.SumOfDefectsMax // 040 - Max Sum of Defects
// x.SumOfDefectsMin // 041 - Min Sum of Defects
// x.SumOfDefectsStdDev // 042 - SumOfDefectsStdDev
// logistics.MesEntity // 043 -
// T:\met08ddupsp1tbi\06_SourceCode\met08ddupsp1tbi\Adaptation\FileHandlers\OpenInsight\FileRead.cs
// x.DcnLpdMin // 001 -
// x.DcnLpdMax // 002 -
// x.DcnLpdMean // 003 - DCN LPD
// x.DcnAreaCountMin // 004 -
// x.DcnAreaCountMax // 005 -
// x.DcnAreaCountMean // 006 - DCN Area
// x.DcnAreaMin // 007 -
// x.DcnAreaMax // 008 -
// x.Date // 009 -
// x.DcnHazeAvgMean // 010 - Haze Average
// string.Empty // 011 -
// string.Empty // 012 -
// string.Empty // 013 -
// string.Empty // 014 -
// string.Empty // 015 -
// string.Empty // 016 -
// string.Empty // 017 -
// string.Empty // 018 -
// string.Empty // 019 -
// string.Empty // 020 -
// string.Empty // 021 -
// string.Empty // 022 -
// string.Empty // 023 -
// string.Empty // 024 -
// string.Empty // 025 -
// string.Empty // 026 -
// string.Empty // 027 -
// x.RDS // 028 - Lot
// x.Reactor // 029 - Process
// x.Recipe // 030 - Part
// x.DcnScrMean // 031 - Scratch Count
// string.Empty // 032 -
// string.Empty // 033 -
// string.Empty // 034 -
// x.DcnMicroScrMean // 035 - Scratch Length
// string.Empty // 036 -
// string.Empty // 037 -
// string.Empty // 038 -
// x.DcnAllMean // 039 - Average Sum of Defects
// x.DcnAllMax // 040 - Max Sum of defects
// x.DcnAllMin // 041 - Min Sum of Defects
// string.Empty // 042 -
// logistics.MesEntity // 043 -
// x.DcnAreaMean // 044 - DCN MM2

280
.vscode/.vba vendored Normal file
View File

@ -0,0 +1,280 @@
Service SetJsonFromProcessDataStandardFormat(DataPath, FileName)
OSREAD Text FROM DataPath:FileName THEN
Records = 0;
Sequence = -1;
HeaderId = -1;
SubgroupId = -1;
ColumnTitlesLine = 0;
FoundEndOfFile = False$;
json = '{ "Records": [':@FM;
SWAP '|' WITH @VM IN Text;
SWAP CRLF$ WITH @FM IN Text;
ColumnTitlesIndexCount = 0;
LineCount = DCOUNT(Text, @FM);
FOR LineLoopIndex = 1 TO LineCount
Line = Text<LineLoopIndex>;
IF FoundEndOfFile = True$ THEN
IF Line<1, 1> = 'END_OFFSET' THEN
ColumnTitlesLine = LineLoopIndex + 2;
END
IF ColumnTitlesLine GT 0 THEN
Row = '{';
SegmentsCount = DCOUNT(Line, @VM);
IF ColumnTitlesIndexCount EQ 0 THEN
FOR SegmentLoopIndex = 1 TO SegmentsCount
IF SegmentLoopIndex = ColumnTitlesLine THEN
ColumnTitlesIndexCount = SegmentsCount - 2;
END
NEXT SegmentLoopIndex
END
IF ColumnTitlesIndexCount GT 0 AND SegmentsCount = ColumnTitlesIndexCount THEN
FOR SegmentLoopIndex = 1 TO SegmentsCount
Value = SRP_String('Trim', Line<1,SegmentLoopIndex>, 'FB');
swap '"' with '\"' in Value;
swap '\' with '\\' in Value;
Column = Text<ColumnTitlesLine,SegmentLoopIndex + 1>;
IF Column[1,1] = '"' AND Column[-1,1] = '"' THEN
Column = Column[2,LEN(Column) - 2];
END
Row = Row:'"':Column:'":"':Value:'",';
NEXT SegmentLoopIndex
Row = SRP_String('Trim', Row, 'B', ','):'},':@FM;
json = json:Row;
Records = Records + 1;
END
END
END
IF Line = 'EOF' THEN
FoundEndOfFile = True$;
Line = Text<LineLoopIndex - 1>;
Convert Tab$ to @FM IN Line
SWAP '=' WITH @VM IN Line;
SWAP ';' WITH @FM IN Line;
IF Line<2, 1> = 'B_HeaderId' THEN
HeaderId = Line<2, 2>
END
IF Line<3, 1> = 'B_SubgroupId' THEN
SubgroupId = Line<3, 2>
END
IF Line<14, 1> = 'B_SEQUENCE' THEN
Sequence = Line<14, 2>
END
END
NEXT LineLoopIndex
IF ColumnTitlesLine GT 0 AND ColumnTitlesIndexCount GT 0 THEN
json = SRP_String('Trim', json, 'B', @FM);
json = SRP_String('Trim', json, 'B', ',');
json = json:@FM:']':@FM:',"Sequence":':Sequence:',"HeaderId":':HeaderId:',"SubgroupId":':SubgroupId:',"Count":':Records:'}';
SWAP @FM WITH CRLF$ IN json;
END
IF LEN(json) GT 0 THEN
set_status(0);
OSWRITE json to DataPath:FileName:'.json'
StatusCode = '';
If Get_Status(StatusCode) THEN
ErrorMessage = 'Error writing run data file to repository: StatusCode = ' : StatusCode;
Metrology_Services('LogResults', '', Machine, 'UID001', Service : ' : ' : ErrorMessage);
Set_Status(0);
END
END
END ELSE
json = '';
END
Response = json;
end service
Service GetStratus(Handle)
Result = ''; // Service ImportStratusData(
Offset = 1
FieldPosition = 13
FieldPositionIncrement = 2
Result<1, 1> = SRP_JSON(Handle, 'GETVALUE', 'Count');
Result<1, 2> = SRP_JSON(Handle, 'GETVALUE', 'Sequence');
Result<1, 3> = SRP_JSON(Handle, 'GETVALUE', 'HeaderId');
Result<1, 4> = SRP_JSON(Handle, 'GETVALUE', 'SubgroupId');
FOR RecordIndex = 1 TO Result<1, 1>
IF RecordIndex = 1 THEN
Result<2> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']DateTime'); // Timestamp
Result<3> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']MesEntity'); // Tool
Result<4> = 'FQA Thickness'; // DataType
Result<5> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']Employee'); // Operator
Result<6> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']Recipe'); // Recipe
Result<7> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']Reactor'); // Reactor
Result<8> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']RDS'); // RDSNo
Result<9> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']PSN'); // PSN
Result<10> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']Batch'); // BatchID
Result<11> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']Cassette'); // Cassette
Result<12> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']GradeMean'); // ThickAvg
END
ForOffset = (RecordIndex - 1) * FieldPositionIncrement;
Result<FieldPosition + ForOffset> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']Slot'); // Position
Result<FieldPosition + ForOffset + Offset> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']Mean'); // DataPoint
NEXT RecordIndex
Response = Result;
end service
Service GetBioRadEPPFQA(Handle)
Result = ''; // Service ImportBioRadEPPFQAData(
Offset = 1
FieldPosition = 13
FieldPositionIncrement = 1
Result<1, 1> = SRP_JSON(Handle, 'GETVALUE', 'Count');
Result<1, 2> = SRP_JSON(Handle, 'GETVALUE', 'Sequence');
Result<1, 3> = SRP_JSON(Handle, 'GETVALUE', 'HeaderId');
Result<1, 4> = SRP_JSON(Handle, 'GETVALUE', 'SubgroupId');
FOR RecordIndex = 1 TO Result<1, 1>
IF RecordIndex = 1 THEN
Result<2> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']DateTime'); // Timestamp
Result<4> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']Recipe'); // ScanRecipe
Result<5> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']Reactor'); // ReactorID
Result<6> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']RDS'); // WMOKeyID
Result<8> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']Layer'); // RunDataLayer
END
ForOffset = (RecordIndex - 1) * FieldPositionIncrement;
Result<FieldPosition + ForOffset> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']Position'); // Position
Result<FieldPosition + ForOffset + Offset> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']Thickness'); // DataPoint
NEXT RecordIndex
Response = Result;
end service
Service GetBioRad(Handle)
Result = ''; // Service ImportBioRadData(
Offset = 1
FieldPosition = 13
FieldPositionIncrement = 2
Result<1, 1> = SRP_JSON(Handle, 'GETVALUE', 'Count');
Result<1, 2> = SRP_JSON(Handle, 'GETVALUE', 'Sequence');
Result<1, 3> = SRP_JSON(Handle, 'GETVALUE', 'HeaderId');
Result<1, 4> = SRP_JSON(Handle, 'GETVALUE', 'SubgroupId');
FOR RecordIndex = 1 TO Result<1, 1>
IF RecordIndex = 1 THEN
Result<2> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']DateTime'); // TimeStamp
Result<4> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']Recipe'); // ScanRecipe
Result<5> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']Reactor'); // ReactorID
Result<5> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']Reactor'); // ToolID
Result<6> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']RDS'); // RDSKeyID
Result<7> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']PSN'); // PSN
Result<8> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']Layer'); // RunDataLayer
Result<9> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']Zone'); // RunDataZone
END
ForOffset = (RecordIndex - 1) * FieldPositionIncrement;
Result<FieldPosition + ForOffset> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']Position'); // Position
Result<FieldPosition + ForOffset + Offset> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']Thickness'); // DataPoint
NEXT RecordIndex
Response = Result;
end service
Service GetCDE(Handle)
Result = ''; // Service ImportCDEData(
Offset = 3
FieldPosition = 23
FieldPositionIncrement = 5
Result<1, 1> = SRP_JSON(Handle, 'GETVALUE', 'Count');
Result<1, 2> = SRP_JSON(Handle, 'GETVALUE', 'Sequence');
Result<1, 3> = SRP_JSON(Handle, 'GETVALUE', 'HeaderId');
Result<1, 4> = SRP_JSON(Handle, 'GETVALUE', 'SubgroupId');
FOR RecordIndex = 1 TO Result<1, 1>
IF RecordIndex = 1 THEN
Result<3> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']Date'); // Timestamp
Result<5> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']RecipeName'); // ScanRecip
Result<6> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']Reactor'); // ReactorID
Result<7> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']RDS'); // RDSKeyID
Result<8> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']PSN'); // PSN
Result<9> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']Layer'); // RunDataLayer
Result<10> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']Zone'); // RunDataZo
END
ForOffset = (RecordIndex - 1) * FieldPositionIncrement;
Result<FieldPosition + ForOffset> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']InferredPoint'); // Position
Result<FieldPosition + ForOffset + Offset> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']Data'); // DataPoint
Result<FieldPosition + ForOffset + FieldPositionIncrement - 1> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']MeritGOF'); // N/A
NEXT RecordIndex
Response = Result;
end service
Service GetHgCV(Handle)
Result = ''; // Service ImportHgCVData(
Offset = 5
PhaseOffset = 7
FieldPosition = 53
FieldPositionIncrement = 9
Result<1, 1> = SRP_JSON(Handle, 'GETVALUE', 'Count');
Result<1, 2> = SRP_JSON(Handle, 'GETVALUE', 'Sequence');
Result<1, 3> = SRP_JSON(Handle, 'GETVALUE', 'HeaderId');
Result<1, 4> = SRP_JSON(Handle, 'GETVALUE', 'SubgroupId');
FOR RecordIndex = 1 TO Result<1, 1>
IF RecordIndex = 1 THEN
Result<2> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']MesEntity'); // ToolID
Result<3> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']Reactor'); // ReactorID
Result<4> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']RDS'); // RDSKeyID
Result<5> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']PSN'); // PSN
Result<8> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']Wafer'); // LayerZonePair
Result<11> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']Date'); // Timestamp
END
ForOffset = (RecordIndex - 1) * FieldPositionIncrement;
Result<FieldPosition + ForOffset> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']Site'); // Position
Result<FieldPosition + ForOffset + Offset> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']RhoAvg'); // HgCVDataPoint
Result<FieldPosition + ForOffset + PhaseOffset> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']Phase'); // PhaseDataPoint
Result<FieldPosition + ForOffset + FieldPositionIncrement - 1> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']Grade'); // N/A
NEXT RecordIndex
Response = Result;
end service
Service GetTencor(Handle)
Result = ''; // Service ImportTencorData(
Result<1, 1> = SRP_JSON(Handle, 'GETVALUE', 'Count');
Result<1, 2> = SRP_JSON(Handle, 'GETVALUE', 'Sequence');
Result<1, 3> = SRP_JSON(Handle, 'GETVALUE', 'HeaderId');
Result<1, 4> = SRP_JSON(Handle, 'GETVALUE', 'SubgroupId');
FOR RecordIndex = 1 TO Result<1, 1>
IF RecordIndex = 1 THEN
Result<9> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']Date'); // Timestamp
Result<10> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']HazeAverageAvg'); // HazeAvg
Result<28> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']RDS'); // RDSKeyID
Result<30> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']WaferRecipe'); // ScanRecipe
Result<39> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']SumOfDefectsAvg'); // SoDAvg
Result<40> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']SumOfDefectsMax'); // SoDMax
Result<41> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']SumOfDefectsMin'); // SoDMin
Result<43> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']MesEntity'); // ScanTool
END
NEXT RecordIndex
Response = Result;
end service
Service GetSP1(Handle)
Result = ''; // Service ImportSP1Data(
Result<5, 1> = SRP_JSON(Handle, 'GETVALUE', 'Count');
Result<5, 2> = SRP_JSON(Handle, 'GETVALUE', 'Sequence');
Result<5, 3> = SRP_JSON(Handle, 'GETVALUE', 'HeaderId');
Result<5, 4> = SRP_JSON(Handle, 'GETVALUE', 'SubgroupId');
FOR RecordIndex = 1 TO Result<5, 1>
IF RecordIndex = 1 THEN
Result<9> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']Date'); // Timestamp
Result<10> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']DcnHazeAvgMean'); // HazeAvg
Result<28> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']RDS'); // RDSKeyID
Result<30> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']Session'); // ScanRecipe
IsMisfit = IndexC(Result<30>, 'MISFIT', 1)
IF IsMisfit THEN
Result<3> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']DcnAllMean'); // SoDAvg
Result<2> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']DcnAllMax'); // SoDMax
Result<1> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']DcnAllMin'); // SoDMin
END ELSE
Result<39> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']DcnAllMean'); // SoDAvg
Result<40> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']DcnAllMax'); // SoDMax
Result<41> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']DcnAllMin'); // SoDMin
END
Result<43> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']MesEntity'); // ScanTool
Result<44> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']DcnAreaMean'); // DCNMM2
END
NEXT RecordIndex
Response = Result;
end service

View File

@ -0,0 +1,50 @@
0 0 0.000 1 12 4.320 0.064 1.176 4/24/2025 1:56:23 AM 0.622 666335 55 6IN_SLIP 0.000 NA 4.440 12 1 SP101 0.357
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 |
|---|---|---|---|----|------|-------|-------|----------------------|-------|----|----|----|----|----|----|----|----|----|----|----|----|----|----|----|----|----|--------|----|----------|----|----|----|----|----|----|----|----|------|----|----|----|-------|-------|
| 0 | 0 | 0 | 1 | 12 | 4.32 | 0.064 | 1.176 | 4/24/2025 1:56:23 AM | 0.622 | | | | | | | | | | | | | | | | | | 666335 | 55 | 6IN_SLIP | 0 | | | | NA | | | | 4.44 | 12 | 1 | | SP101 | 0.357 |
<1>:0
<2>:0
<3>:0
<4>:1
<5>:12
<6>:4.32
<7>:0.064
<8>:1.176
<9>:4/24/2025 1:56:23 AM
<10>:0.622
<11>:
<12>:
<13>:
<14>:
<15>:
<16>:
<17>:
<18>:
<19>:
<20>:
<21>:
<22>:
<23>:
<24>:
<25>:
<26>:
<27>:
<28>:666335
<29>:55
<30>:6IN_SLIP
<31>:0
<32>:
<33>:
<34>:
<35>:NA
<36>:
<37>:
<38>:
<39>:4.44
<40>:12
<41>:1
<42>:
<43>:SP101
<44>:0.357

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,87 @@
HEADER_TAG HEADER_VALUE
FORMAT 2.00
NUMBER_PASSES 0001
HEADER_OFFSET H#######T
DATA_OFFSET D#######T
END_OFFSET E#######T
"Time" "A_LOGISTICS" "B_LOGISTICS" "Test" "Count" "Index" "MesEntity" "Date" "Employee" "Lot" "PSN" "Reactor" "Recipe" "Grade" "HeaderUniqueId" "RDS" "Session" "Side" "SrcDest" "UniqueId" "WaferID" "DcnAllMax" "DcnAllMean" "DcnAllMin" "DcnAllStdDev" "DcnAreaCountMax" "DcnAreaCountMean" "DcnAreaCountMin" "DcnAreaCountStdDev" "DcnAreaMax" "DcnAreaMean" "DcnAreaMin" "DcnAreaStdDev" "DcnBin1Max" "DcnBin1Mean" "DcnBin1Min" "DcnBin1StdDev" "DcnBin2Max" "DcnBin2Mean" "DcnBin2Min" "DcnBin2StdDev" "DcnBin3Max" "DcnBin3Mean" "DcnBin3Min" "DcnBin3StdDev" "DcnBin4Max" "DcnBin4Mean" "DcnBin4Min" "DcnBin4StdDev" "DcnBin5Max" "DcnBin5Mean" "DcnBin5Min" "DcnBin5StdDev" "DcnBin6Max" "DcnBin6Mean" "DcnBin6Min" "DcnBin6StdDev" "DcnBin7Max" "DcnBin7Mean" "DcnBin7Min" "DcnBin7StdDev" "DcnBin8Max" "DcnBin8Mean" "DcnBin8Min" "DcnBin8StdDev" "DcnHazeAvgMax" "DcnHazeAvgMean" "DcnHazeAvgMin" "DcnHazeAvgStdDev" "DcnHazeMedianMax" "DcnHazeMedianMean" "DcnHazeMedianMin" "DcnHazeMedianStdDev" "DcnHazeStdDevMax" "DcnHazeStdDevMean" "DcnHazeStdDevMin" "DcnHazeStdDevStdDev" "DcnLpdESMax" "DcnLpdESMean" "DcnLpdESMin" "DcnLpdESStdDev" "DcnLpdMax" "DcnLpdMean" "DcnLpdMin" "DcnLpdNMax" "DcnLpdNMean" "DcnLpdNMin" "DcnLpdNStdDev" "DcnLpdStdDev" "DcnMicroScrMax" "DcnMicroScrMean" "DcnMicroScrMin" "DcnMicroScrStdDev" "DcnScrMax" "DcnScrMean" "DcnScrMin" "DcnScrStdDev" "DcnSlipMax" "DcnSlipMean" "DcnSlipMin" "DcnSlipStdDev" "DnnAllMax" "DnnAllMean" "DnnAllMin" "DnnAllStdDev" "DnnAreaCountMax" "DnnAreaCountMean" "DnnAreaCountMin" "DnnAreaCountStdDev" "DnnAreaMax" "DnnAreaMean" "DnnAreaMin" "DnnAreaStdDev" "DnnBin1Max" "DnnBin1Mean" "DnnBin1Min" "DnnBin1StdDev" "DnnBin2Max" "DnnBin2Mean" "DnnBin2Min" "DnnBin2StdDev" "DnnBin3Max" "DnnBin3Mean" "DnnBin3Min" "DnnBin3StdDev" "DnnBin4Max" "DnnBin4Mean" "DnnBin4Min" "DnnBin4StdDev" "DnnBin5Max" "DnnBin5Mean" "DnnBin5Min" "DnnBin5StdDev" "DnnBin6Max" "DnnBin6Mean" "DnnBin6Min" "DnnBin6StdDev" "DnnBin7Max" "DnnBin7Mean" "DnnBin7Min" "DnnBin7StdDev" "DnnBin8Max" "DnnBin8Mean" "DnnBin8Min" "DnnBin8StdDev" "DnnHazeAvgMax" "DnnHazeAvgMean" "DnnHazeAvgMin" "DnnHazeAvgStdDev" "DnnHazeMedianMax" "DnnHazeMedianMean" "DnnHazeMedianMin" "DnnHazeMedianStdDev" "DnnHazeStdDevMax" "DnnHazeStdDevMean" "DnnHazeStdDevMin" "DnnHazeStdDevStdDev" "DnnLpdESMax" "DnnLpdESMean" "DnnLpdESMin" "DnnLpdESStdDev" "DnnLpdMax" "DnnLpdMean" "DnnLpdMin" "DnnLpdNMax" "DnnLpdNMean" "DnnLpdNMin" "DnnLpdNStdDev" "DnnLpdStdDev" "DnnMicroScrMax" "DnnMicroScrMean" "DnnMicroScrMin" "DnnMicroScrStdDev" "DnnScrMax" "DnnScrMean" "DnnScrMin" "DnnScrStdDev" "DnnSlipMax" "DnnSlipMean" "DnnSlipMin" "DnnSlipStdDev" "DwnAllMax" "DwnAllMean" "DwnAllMin" "DwnAllStdDev" "DwnAreaCountMax" "DwnAreaCountMean" "DwnAreaCountMin" "DwnAreaCountStdDev" "DwnAreaMax" "DwnAreaMean" "DwnAreaMin" "DwnAreaStdDev" "DwnBin1Max" "DwnBin1Mean" "DwnBin1Min" "DwnBin1StdDev" "DwnBin2Max" "DwnBin2Mean" "DwnBin2Min" "DwnBin2StdDev" "DwnBin3Max" "DwnBin3Mean" "DwnBin3Min" "DwnBin3StdDev" "DwnBin4Max" "DwnBin4Mean" "DwnBin4Min" "DwnBin4StdDev" "DwnBin5Max" "DwnBin5Mean" "DwnBin5Min" "DwnBin5StdDev" "DwnBin6Max" "DwnBin6Mean" "DwnBin6Min" "DwnBin6StdDev" "DwnBin7Max" "DwnBin7Mean" "DwnBin7Min" "DwnBin7StdDev" "DwnBin8Max" "DwnBin8Mean" "DwnBin8Min" "DwnBin8StdDev" "DwnHazeAvgMax" "DwnHazeAvgMean" "DwnHazeAvgMin" "DwnHazeAvgStdDev" "DwnHazeMedianMax" "DwnHazeMedianMean" "DwnHazeMedianMin" "DwnHazeMedianStdDev" "DwnHazeStdDevMax" "DwnHazeStdDevMean" "DwnHazeStdDevMin" "DwnHazeStdDevStdDev" "DwnLpdESMax" "DwnLpdESMean" "DwnLpdESMin" "DwnLpdESStdDev" "DwnLpdMax" "DwnLpdMean" "DwnLpdMin" "DwnLpdNMax" "DwnLpdNMean" "DwnLpdNMin" "DwnLpdNStdDev" "DwnLpdStdDev" "DwnMicroScrMax" "DwnMicroScrMean" "DwnMicroScrMin" "DwnMicroScrStdDev" "DwnScrMax" "DwnScrMean" "DwnScrMin" "DwnScrStdDev" "DwnSlipMax" "DwnSlipMean" "DwnSlipMin" "DwnSlipStdDev" "DcnAll" "DcnArea" "DcnAreaCount" "DcnBin1" "DcnBin2" "DcnBin3" "DcnBin4" "DcnBin5" "DcnBin6" "DcnBin7" "DcnBin8" "DcnHazeAvg" "DcnHazeMedian" "DcnHazeStdDev" "DcnLpd" "DcnLpdES" "DcnLpdN" "DcnMicroScr" "DcnScr" "DcnSlip" "DnnAll" "DnnArea" "DnnAreaCount" "DnnBin1" "DnnBin2" "DnnBin3" "DnnBin4" "DnnBin5" "DnnBin6" "DnnBin7" "DnnBin8" "DnnHazeAvg" "DnnHazeMedian" "DnnHazeStdDev" "DnnLpd" "DnnLpdES" "DnnLpdN" "DnnMicroScr" "DnnScr" "DnnSlip" "DwnAll" "DwnArea" "DwnAreaCount" "DwnBin1" "DwnBin2" "DwnBin3" "DwnBin4" "DwnBin5" "DwnBin6" "DwnBin7" "DwnBin8" "DwnHazeAvg" "DwnHazeMedian" "DwnHazeStdDev" "DwnLpd" "DwnLpdES" "DwnLpdN" "DwnMicroScr" "DwnScr" "DwnSlip"
0.00 1 2 8 25 0 SP101 4/24/2025 1:56:23 AM 666335 5113 55 6IN_SLIP Grade1 HeaderUniqueId 666335 6IN_SLIP F 2/1-2/1 UniqueId 1 12 4.440 1 2.238 12 4.320 1 2.249 1.176 0.357 0.064 0.243 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0.660 0.622 0.589 0.016 0.645 0.615 0.584 0.016 0.278 0.070 0.048 0.044 NA NA NA NA 0 0.000 0 NA NA NA NA 0.000 NA NA NA NA 0 0.000 0 0.000 1.732 0.093 0.000 0.361 14 4.840 1 2.577 14 4.840 1 2.577 0.786 0.250 0.073 0.154 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0.477 0.440 0.411 0.019 0.476 0.437 0.408 0.019 0.187 0.032 0.017 0.033 NA NA NA NA 0 0.000 0 NA NA NA NA 0.000 NA NA NA NA NA NA NA NA NA NA NA NA 4 1.560 0 1.083 4 1.560 0 1.083 0.042 0.007 0.000 0.012 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0.218 0.182 0.151 0.016 0.200 0.168 0.137 0.017 0.108 0.065 0.053 0.010 NA NA NA NA 0 0.000 0 NA NA NA NA 0.000 NA NA NA NA NA NA NA NA NA NA NA NA 0.230 2 0 0 0 0 0 0 0 0 0.640 0.636 0.061 0 NA NA NA 0 0.000 0.155 4 0 0 0 0 0 0 0 0 0.448 0.443 0.028 0 NA NA NA NA NA 0.000 0 0 0 0 0 0 0 0 0 0.192 0.179 0.066 0 NA NA NA NA NA
0.00 1 2 8 25 1 SP101 4/24/2025 1:56:23 AM 666335 5113 55 6IN_SLIP Grade1 HeaderUniqueId 666335 6IN_SLIP F 2/2-2/2 UniqueId 2 12 4.440 1 2.238 12 4.320 1 2.249 1.176 0.357 0.064 0.243 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0.660 0.622 0.589 0.016 0.645 0.615 0.584 0.016 0.278 0.070 0.048 0.044 NA NA NA NA 0 0.000 0 NA NA NA NA 0.000 NA NA NA NA 0 0.000 0 0.000 1.732 0.093 0.000 0.361 14 4.840 1 2.577 14 4.840 1 2.577 0.786 0.250 0.073 0.154 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0.477 0.440 0.411 0.019 0.476 0.437 0.408 0.019 0.187 0.032 0.017 0.033 NA NA NA NA 0 0.000 0 NA NA NA NA 0.000 NA NA NA NA NA NA NA NA NA NA NA NA 4 1.560 0 1.083 4 1.560 0 1.083 0.042 0.007 0.000 0.012 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0.218 0.182 0.151 0.016 0.200 0.168 0.137 0.017 0.108 0.065 0.053 0.010 NA NA NA NA 0 0.000 0 NA NA NA NA 0.000 NA NA NA NA NA NA NA NA NA NA NA NA 0.064 2 0 0 0 0 0 0 0 0 0.644 0.636 0.058 0 NA NA NA 0 0.581 0.073 4 0 0 0 0 0 0 0 0 0.459 0.456 0.024 0 NA NA NA NA NA 0.000 0 0 0 0 0 0 0 0 0 0.185 0.169 0.062 0 NA NA NA NA NA
0.00 1 2 8 25 2 SP101 4/24/2025 1:56:23 AM 666335 5113 55 6IN_SLIP Grade1 HeaderUniqueId 666335 6IN_SLIP F 2/3-2/3 UniqueId 3 12 4.440 1 2.238 12 4.320 1 2.249 1.176 0.357 0.064 0.243 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0.660 0.622 0.589 0.016 0.645 0.615 0.584 0.016 0.278 0.070 0.048 0.044 NA NA NA NA 0 0.000 0 NA NA NA NA 0.000 NA NA NA NA 0 0.000 0 0.000 1.732 0.093 0.000 0.361 14 4.840 1 2.577 14 4.840 1 2.577 0.786 0.250 0.073 0.154 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0.477 0.440 0.411 0.019 0.476 0.437 0.408 0.019 0.187 0.032 0.017 0.033 NA NA NA NA 0 0.000 0 NA NA NA NA 0.000 NA NA NA NA NA NA NA NA NA NA NA NA 4 1.560 0 1.083 4 1.560 0 1.083 0.042 0.007 0.000 0.012 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0.218 0.182 0.151 0.016 0.200 0.168 0.137 0.017 0.108 0.065 0.053 0.010 NA NA NA NA 0 0.000 0 NA NA NA NA 0.000 NA NA NA NA NA NA NA NA NA NA NA NA 0.345 7 0 0 0 0 0 0 0 0 0.615 0.601 0.070 0 NA NA NA 0 0.000 0.284 9 0 0 0 0 0 0 0 0 0.449 0.447 0.017 0 NA NA NA NA NA 0.000 4 0 0 0 0 0 0 0 0 0.165 0.145 0.068 0 NA NA NA NA NA
0.00 1 2 8 25 3 SP101 4/24/2025 1:56:23 AM 666335 5113 55 6IN_SLIP Grade1 HeaderUniqueId 666335 6IN_SLIP F 2/4-2/4 UniqueId 4 12 4.440 1 2.238 12 4.320 1 2.249 1.176 0.357 0.064 0.243 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0.660 0.622 0.589 0.016 0.645 0.615 0.584 0.016 0.278 0.070 0.048 0.044 NA NA NA NA 0 0.000 0 NA NA NA NA 0.000 NA NA NA NA 0 0.000 0 0.000 1.732 0.093 0.000 0.361 14 4.840 1 2.577 14 4.840 1 2.577 0.786 0.250 0.073 0.154 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0.477 0.440 0.411 0.019 0.476 0.437 0.408 0.019 0.187 0.032 0.017 0.033 NA NA NA NA 0 0.000 0 NA NA NA NA 0.000 NA NA NA NA NA NA NA NA NA NA NA NA 4 1.560 0 1.083 4 1.560 0 1.083 0.042 0.007 0.000 0.012 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0.218 0.182 0.151 0.016 0.200 0.168 0.137 0.017 0.108 0.065 0.053 0.010 NA NA NA NA 0 0.000 0 NA NA NA NA 0.000 NA NA NA NA NA NA NA NA NA NA NA NA 0.284 4 0 0 0 0 0 0 0 0 0.631 0.625 0.065 0 NA NA NA 0 0.000 0.192 4 0 0 0 0 0 0 0 0 0.450 0.448 0.026 0 NA NA NA NA NA 0.000 1 0 0 0 0 0 0 0 0 0.181 0.166 0.062 0 NA NA NA NA NA
0.00 1 2 8 25 4 SP101 4/24/2025 1:56:23 AM 666335 5113 55 6IN_SLIP Grade1 HeaderUniqueId 666335 6IN_SLIP F 2/5-2/5 UniqueId 5 12 4.440 1 2.238 12 4.320 1 2.249 1.176 0.357 0.064 0.243 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0.660 0.622 0.589 0.016 0.645 0.615 0.584 0.016 0.278 0.070 0.048 0.044 NA NA NA NA 0 0.000 0 NA NA NA NA 0.000 NA NA NA NA 0 0.000 0 0.000 1.732 0.093 0.000 0.361 14 4.840 1 2.577 14 4.840 1 2.577 0.786 0.250 0.073 0.154 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0.477 0.440 0.411 0.019 0.476 0.437 0.408 0.019 0.187 0.032 0.017 0.033 NA NA NA NA 0 0.000 0 NA NA NA NA 0.000 NA NA NA NA NA NA NA NA NA NA NA NA 4 1.560 0 1.083 4 1.560 0 1.083 0.042 0.007 0.000 0.012 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0.218 0.182 0.151 0.016 0.200 0.168 0.137 0.017 0.108 0.065 0.053 0.010 NA NA NA NA 0 0.000 0 NA NA NA NA 0.000 NA NA NA NA NA NA NA NA NA NA NA NA 0.298 2 0 0 0 0 0 0 0 0 0.624 0.612 0.065 0 NA NA NA 0 0.000 0.202 2 0 0 0 0 0 0 0 0 0.453 0.452 0.026 0 NA NA NA NA NA 0.028 2 0 0 0 0 0 0 0 0 0.170 0.153 0.061 0 NA NA NA NA NA
0.00 1 2 8 25 5 SP101 4/24/2025 1:56:23 AM 666335 5113 55 6IN_SLIP Grade1 HeaderUniqueId 666335 6IN_SLIP F 2/6-2/6 UniqueId 6 12 4.440 1 2.238 12 4.320 1 2.249 1.176 0.357 0.064 0.243 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0.660 0.622 0.589 0.016 0.645 0.615 0.584 0.016 0.278 0.070 0.048 0.044 NA NA NA NA 0 0.000 0 NA NA NA NA 0.000 NA NA NA NA 0 0.000 0 0.000 1.732 0.093 0.000 0.361 14 4.840 1 2.577 14 4.840 1 2.577 0.786 0.250 0.073 0.154 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0.477 0.440 0.411 0.019 0.476 0.437 0.408 0.019 0.187 0.032 0.017 0.033 NA NA NA NA 0 0.000 0 NA NA NA NA 0.000 NA NA NA NA NA NA NA NA NA NA NA NA 4 1.560 0 1.083 4 1.560 0 1.083 0.042 0.007 0.000 0.012 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0.218 0.182 0.151 0.016 0.200 0.168 0.137 0.017 0.108 0.065 0.053 0.010 NA NA NA NA 0 0.000 0 NA NA NA NA 0.000 NA NA NA NA NA NA NA NA NA NA NA NA 0.119 1 0 0 0 0 0 0 0 0 0.650 0.641 0.060 0 NA NA NA 0 0.000 0.083 1 0 0 0 0 0 0 0 0 0.468 0.467 0.027 0 NA NA NA NA NA 0.000 1 0 0 0 0 0 0 0 0 0.182 0.166 0.066 0 NA NA NA NA NA
0.00 1 2 8 25 6 SP101 4/24/2025 1:56:23 AM 666335 5113 55 6IN_SLIP Grade1 HeaderUniqueId 666335 6IN_SLIP F 2/7-2/7 UniqueId 7 12 4.440 1 2.238 12 4.320 1 2.249 1.176 0.357 0.064 0.243 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0.660 0.622 0.589 0.016 0.645 0.615 0.584 0.016 0.278 0.070 0.048 0.044 NA NA NA NA 0 0.000 0 NA NA NA NA 0.000 NA NA NA NA 0 0.000 0 0.000 1.732 0.093 0.000 0.361 14 4.840 1 2.577 14 4.840 1 2.577 0.786 0.250 0.073 0.154 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0.477 0.440 0.411 0.019 0.476 0.437 0.408 0.019 0.187 0.032 0.017 0.033 NA NA NA NA 0 0.000 0 NA NA NA NA 0.000 NA NA NA NA NA NA NA NA NA NA NA NA 4 1.560 0 1.083 4 1.560 0 1.083 0.042 0.007 0.000 0.012 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0.218 0.182 0.151 0.016 0.200 0.168 0.137 0.017 0.108 0.065 0.053 0.010 NA NA NA NA 0 0.000 0 NA NA NA NA 0.000 NA NA NA NA NA NA NA NA NA NA NA NA 0.293 5 0 0 0 0 0 0 0 0 0.660 0.645 0.072 0 NA NA NA 0 0.000 0.222 5 0 0 0 0 0 0 0 0 0.477 0.476 0.018 0 NA NA NA NA NA 0.000 1 0 0 0 0 0 0 0 0 0.182 0.164 0.072 0 NA NA NA NA NA
0.00 1 2 8 25 7 SP101 4/24/2025 1:56:23 AM 666335 5113 55 6IN_SLIP Grade1 HeaderUniqueId 666335 6IN_SLIP F 2/8-2/8 UniqueId 8 12 4.440 1 2.238 12 4.320 1 2.249 1.176 0.357 0.064 0.243 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0.660 0.622 0.589 0.016 0.645 0.615 0.584 0.016 0.278 0.070 0.048 0.044 NA NA NA NA 0 0.000 0 NA NA NA NA 0.000 NA NA NA NA 0 0.000 0 0.000 1.732 0.093 0.000 0.361 14 4.840 1 2.577 14 4.840 1 2.577 0.786 0.250 0.073 0.154 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0.477 0.440 0.411 0.019 0.476 0.437 0.408 0.019 0.187 0.032 0.017 0.033 NA NA NA NA 0 0.000 0 NA NA NA NA 0.000 NA NA NA NA NA NA NA NA NA NA NA NA 4 1.560 0 1.083 4 1.560 0 1.083 0.042 0.007 0.000 0.012 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0.218 0.182 0.151 0.016 0.200 0.168 0.137 0.017 0.108 0.065 0.053 0.010 NA NA NA NA 0 0.000 0 NA NA NA NA 0.000 NA NA NA NA NA NA NA NA NA NA NA NA 0.530 5 0 0 0 0 0 0 0 0 0.608 0.596 0.059 0 NA NA NA 0 0.000 0.309 7 0 0 0 0 0 0 0 0 0.442 0.437 0.030 0 NA NA NA NA NA 0.024 3 0 0 0 0 0 0 0 0 0.167 0.145 0.065 0 NA NA NA NA NA
0.00 1 2 8 25 8 SP101 4/24/2025 1:56:23 AM 666335 5113 55 6IN_SLIP Grade1 HeaderUniqueId 666335 6IN_SLIP F 2/9-2/9 UniqueId 9 12 4.440 1 2.238 12 4.320 1 2.249 1.176 0.357 0.064 0.243 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0.660 0.622 0.589 0.016 0.645 0.615 0.584 0.016 0.278 0.070 0.048 0.044 NA NA NA NA 0 0.000 0 NA NA NA NA 0.000 NA NA NA NA 0 0.000 0 0.000 1.732 0.093 0.000 0.361 14 4.840 1 2.577 14 4.840 1 2.577 0.786 0.250 0.073 0.154 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0.477 0.440 0.411 0.019 0.476 0.437 0.408 0.019 0.187 0.032 0.017 0.033 NA NA NA NA 0 0.000 0 NA NA NA NA 0.000 NA NA NA NA NA NA NA NA NA NA NA NA 4 1.560 0 1.083 4 1.560 0 1.083 0.042 0.007 0.000 0.012 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0.218 0.182 0.151 0.016 0.200 0.168 0.137 0.017 0.108 0.065 0.053 0.010 NA NA NA NA 0 0.000 0 NA NA NA NA 0.000 NA NA NA NA NA NA NA NA NA NA NA NA 0.138 3 0 0 0 0 0 0 0 0 0.607 0.598 0.086 0 NA NA NA 0 0.000 0.113 3 0 0 0 0 0 0 0 0 0.448 0.444 0.043 0 NA NA NA NA NA 0.000 0 0 0 0 0 0 0 0 0 0.160 0.147 0.065 0 NA NA NA NA NA
0.00 1 2 8 25 9 SP101 4/24/2025 1:56:23 AM 666335 5113 55 6IN_SLIP Grade1 HeaderUniqueId 666335 6IN_SLIP F 2/10-2/10 UniqueId 10 12 4.440 1 2.238 12 4.320 1 2.249 1.176 0.357 0.064 0.243 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0.660 0.622 0.589 0.016 0.645 0.615 0.584 0.016 0.278 0.070 0.048 0.044 NA NA NA NA 0 0.000 0 NA NA NA NA 0.000 NA NA NA NA 0 0.000 0 0.000 1.732 0.093 0.000 0.361 14 4.840 1 2.577 14 4.840 1 2.577 0.786 0.250 0.073 0.154 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0.477 0.440 0.411 0.019 0.476 0.437 0.408 0.019 0.187 0.032 0.017 0.033 NA NA NA NA 0 0.000 0 NA NA NA NA 0.000 NA NA NA NA NA NA NA NA NA NA NA NA 4 1.560 0 1.083 4 1.560 0 1.083 0.042 0.007 0.000 0.012 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0.218 0.182 0.151 0.016 0.200 0.168 0.137 0.017 0.108 0.065 0.053 0.010 NA NA NA NA 0 0.000 0 NA NA NA NA 0.000 NA NA NA NA NA NA NA NA NA NA NA NA 0.501 5 0 0 0 0 0 0 0 0 0.627 0.618 0.060 0 NA NA NA 0 0.000 0.347 5 0 0 0 0 0 0 0 0 0.459 0.453 0.027 0 NA NA NA NA NA 0.021 2 0 0 0 0 0 0 0 0 0.169 0.154 0.066 0 NA NA NA NA NA
0.00 1 2 8 25 10 SP101 4/24/2025 1:56:23 AM 666335 5113 55 6IN_SLIP Grade1 HeaderUniqueId 666335 6IN_SLIP F 2/11-2/11 UniqueId 11 12 4.440 1 2.238 12 4.320 1 2.249 1.176 0.357 0.064 0.243 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0.660 0.622 0.589 0.016 0.645 0.615 0.584 0.016 0.278 0.070 0.048 0.044 NA NA NA NA 0 0.000 0 NA NA NA NA 0.000 NA NA NA NA 0 0.000 0 0.000 1.732 0.093 0.000 0.361 14 4.840 1 2.577 14 4.840 1 2.577 0.786 0.250 0.073 0.154 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0.477 0.440 0.411 0.019 0.476 0.437 0.408 0.019 0.187 0.032 0.017 0.033 NA NA NA NA 0 0.000 0 NA NA NA NA 0.000 NA NA NA NA NA NA NA NA NA NA NA NA 4 1.560 0 1.083 4 1.560 0 1.083 0.042 0.007 0.000 0.012 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0.218 0.182 0.151 0.016 0.200 0.168 0.137 0.017 0.108 0.065 0.053 0.010 NA NA NA NA 0 0.000 0 NA NA NA NA 0.000 NA NA NA NA NA NA NA NA NA NA NA NA 0.498 7 0 0 0 0 0 0 0 0 0.611 0.604 0.057 0 NA NA NA 0 0.000 0.342 7 0 0 0 0 0 0 0 0 0.461 0.461 0.020 0 NA NA NA NA NA 0.022 3 0 0 0 0 0 0 0 0 0.151 0.137 0.061 0 NA NA NA NA NA
0.00 1 2 8 25 11 SP101 4/24/2025 1:56:23 AM 666335 5113 55 6IN_SLIP Grade1 HeaderUniqueId 666335 6IN_SLIP F 2/12-2/12 UniqueId 12 12 4.440 1 2.238 12 4.320 1 2.249 1.176 0.357 0.064 0.243 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0.660 0.622 0.589 0.016 0.645 0.615 0.584 0.016 0.278 0.070 0.048 0.044 NA NA NA NA 0 0.000 0 NA NA NA NA 0.000 NA NA NA NA 0 0.000 0 0.000 1.732 0.093 0.000 0.361 14 4.840 1 2.577 14 4.840 1 2.577 0.786 0.250 0.073 0.154 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0.477 0.440 0.411 0.019 0.476 0.437 0.408 0.019 0.187 0.032 0.017 0.033 NA NA NA NA 0 0.000 0 NA NA NA NA 0.000 NA NA NA NA NA NA NA NA NA NA NA NA 4 1.560 0 1.083 4 1.560 0 1.083 0.042 0.007 0.000 0.012 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0.218 0.182 0.151 0.016 0.200 0.168 0.137 0.017 0.108 0.065 0.053 0.010 NA NA NA NA 0 0.000 0 NA NA NA NA 0.000 NA NA NA NA NA NA NA NA NA NA NA NA 0.311 3 0 0 0 0 0 0 0 0 0.617 0.608 0.059 0 NA NA NA 0 0.000 0.197 3 0 0 0 0 0 0 0 0 0.448 0.444 0.022 0 NA NA NA NA NA 0.000 1 0 0 0 0 0 0 0 0 0.169 0.156 0.062 0 NA NA NA NA NA
0.00 1 2 8 25 12 SP101 4/24/2025 1:56:23 AM 666335 5113 55 6IN_SLIP Grade1 HeaderUniqueId 666335 6IN_SLIP F 2/13-2/13 UniqueId 13 12 4.440 1 2.238 12 4.320 1 2.249 1.176 0.357 0.064 0.243 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0.660 0.622 0.589 0.016 0.645 0.615 0.584 0.016 0.278 0.070 0.048 0.044 NA NA NA NA 0 0.000 0 NA NA NA NA 0.000 NA NA NA NA 0 0.000 0 0.000 1.732 0.093 0.000 0.361 14 4.840 1 2.577 14 4.840 1 2.577 0.786 0.250 0.073 0.154 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0.477 0.440 0.411 0.019 0.476 0.437 0.408 0.019 0.187 0.032 0.017 0.033 NA NA NA NA 0 0.000 0 NA NA NA NA 0.000 NA NA NA NA NA NA NA NA NA NA NA NA 4 1.560 0 1.083 4 1.560 0 1.083 0.042 0.007 0.000 0.012 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0.218 0.182 0.151 0.016 0.200 0.168 0.137 0.017 0.108 0.065 0.053 0.010 NA NA NA NA 0 0.000 0 NA NA NA NA 0.000 NA NA NA NA NA NA NA NA NA NA NA NA 0.254 4 0 0 0 0 0 0 0 0 0.623 0.619 0.059 0 NA NA NA 0 0.000 0.191 4 0 0 0 0 0 0 0 0 0.461 0.458 0.023 0 NA NA NA NA NA 0.000 1 0 0 0 0 0 0 0 0 0.162 0.153 0.057 0 NA NA NA NA NA
0.00 1 2 8 25 13 SP101 4/24/2025 1:56:23 AM 666335 5113 55 6IN_SLIP Grade1 HeaderUniqueId 666335 6IN_SLIP F 2/14-2/14 UniqueId 14 12 4.440 1 2.238 12 4.320 1 2.249 1.176 0.357 0.064 0.243 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0.660 0.622 0.589 0.016 0.645 0.615 0.584 0.016 0.278 0.070 0.048 0.044 NA NA NA NA 0 0.000 0 NA NA NA NA 0.000 NA NA NA NA 0 0.000 0 0.000 1.732 0.093 0.000 0.361 14 4.840 1 2.577 14 4.840 1 2.577 0.786 0.250 0.073 0.154 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0.477 0.440 0.411 0.019 0.476 0.437 0.408 0.019 0.187 0.032 0.017 0.033 NA NA NA NA 0 0.000 0 NA NA NA NA 0.000 NA NA NA NA NA NA NA NA NA NA NA NA 4 1.560 0 1.083 4 1.560 0 1.083 0.042 0.007 0.000 0.012 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0.218 0.182 0.151 0.016 0.200 0.168 0.137 0.017 0.108 0.065 0.053 0.010 NA NA NA NA 0 0.000 0 NA NA NA NA 0.000 NA NA NA NA NA NA NA NA NA NA NA NA 0.445 5 0 0 0 0 0 0 0 0 0.622 0.615 0.057 0 NA NA NA 0 0.000 0.316 5 0 0 0 0 0 0 0 0 0.444 0.440 0.025 0 NA NA NA NA NA 0.000 2 0 0 0 0 0 0 0 0 0.178 0.168 0.064 0 NA NA NA NA NA
0.00 1 2 8 25 14 SP101 4/24/2025 1:56:23 AM 666335 5113 55 6IN_SLIP Grade1 HeaderUniqueId 666335 6IN_SLIP F 2/15-2/15 UniqueId 15 12 4.440 1 2.238 12 4.320 1 2.249 1.176 0.357 0.064 0.243 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0.660 0.622 0.589 0.016 0.645 0.615 0.584 0.016 0.278 0.070 0.048 0.044 NA NA NA NA 0 0.000 0 NA NA NA NA 0.000 NA NA NA NA 0 0.000 0 0.000 1.732 0.093 0.000 0.361 14 4.840 1 2.577 14 4.840 1 2.577 0.786 0.250 0.073 0.154 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0.477 0.440 0.411 0.019 0.476 0.437 0.408 0.019 0.187 0.032 0.017 0.033 NA NA NA NA 0 0.000 0 NA NA NA NA 0.000 NA NA NA NA NA NA NA NA NA NA NA NA 4 1.560 0 1.083 4 1.560 0 1.083 0.042 0.007 0.000 0.012 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0.218 0.182 0.151 0.016 0.200 0.168 0.137 0.017 0.108 0.065 0.053 0.010 NA NA NA NA 0 0.000 0 NA NA NA NA 0.000 NA NA NA NA NA NA NA NA NA NA NA NA 0.285 2 0 0 0 0 0 0 0 0 0.609 0.602 0.058 0 NA NA NA 0 0.000 0.190 3 0 0 0 0 0 0 0 0 0.425 0.418 0.027 0 NA NA NA NA NA 0.000 1 0 0 0 0 0 0 0 0 0.184 0.172 0.062 0 NA NA NA NA NA
0.00 1 2 8 25 15 SP101 4/24/2025 1:56:23 AM 666335 5113 55 6IN_SLIP Grade1 HeaderUniqueId 666335 6IN_SLIP F 2/16-2/16 UniqueId 16 12 4.440 1 2.238 12 4.320 1 2.249 1.176 0.357 0.064 0.243 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0.660 0.622 0.589 0.016 0.645 0.615 0.584 0.016 0.278 0.070 0.048 0.044 NA NA NA NA 0 0.000 0 NA NA NA NA 0.000 NA NA NA NA 0 0.000 0 0.000 1.732 0.093 0.000 0.361 14 4.840 1 2.577 14 4.840 1 2.577 0.786 0.250 0.073 0.154 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0.477 0.440 0.411 0.019 0.476 0.437 0.408 0.019 0.187 0.032 0.017 0.033 NA NA NA NA 0 0.000 0 NA NA NA NA 0.000 NA NA NA NA NA NA NA NA NA NA NA NA 4 1.560 0 1.083 4 1.560 0 1.083 0.042 0.007 0.000 0.012 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0.218 0.182 0.151 0.016 0.200 0.168 0.137 0.017 0.108 0.065 0.053 0.010 NA NA NA NA 0 0.000 0 NA NA NA NA 0.000 NA NA NA NA NA NA NA NA NA NA NA NA 0.845 6 0 0 0 0 0 0 0 0 0.604 0.604 0.057 0 NA NA NA 0 0.000 0.547 6 0 0 0 0 0 0 0 0 0.426 0.423 0.024 0 NA NA NA NA NA 0.026 3 0 0 0 0 0 0 0 0 0.178 0.170 0.063 0 NA NA NA NA NA
0.00 1 2 8 25 16 SP101 4/24/2025 1:56:23 AM 666335 5113 55 6IN_SLIP Grade1 HeaderUniqueId 666335 6IN_SLIP F 2/17-2/17 UniqueId 17 12 4.440 1 2.238 12 4.320 1 2.249 1.176 0.357 0.064 0.243 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0.660 0.622 0.589 0.016 0.645 0.615 0.584 0.016 0.278 0.070 0.048 0.044 NA NA NA NA 0 0.000 0 NA NA NA NA 0.000 NA NA NA NA 0 0.000 0 0.000 1.732 0.093 0.000 0.361 14 4.840 1 2.577 14 4.840 1 2.577 0.786 0.250 0.073 0.154 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0.477 0.440 0.411 0.019 0.476 0.437 0.408 0.019 0.187 0.032 0.017 0.033 NA NA NA NA 0 0.000 0 NA NA NA NA 0.000 NA NA NA NA NA NA NA NA NA NA NA NA 4 1.560 0 1.083 4 1.560 0 1.083 0.042 0.007 0.000 0.012 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0.218 0.182 0.151 0.016 0.200 0.168 0.137 0.017 0.108 0.065 0.053 0.010 NA NA NA NA 0 0.000 0 NA NA NA NA 0.000 NA NA NA NA NA NA NA NA NA NA NA NA 0.148 3 0 0 0 0 0 0 0 0 0.625 0.623 0.053 0 NA NA NA 0 0.000 0.111 3 0 0 0 0 0 0 0 0 0.432 0.430 0.022 0 NA NA NA NA NA 0.000 1 0 0 0 0 0 0 0 0 0.193 0.188 0.060 0 NA NA NA NA NA
0.00 1 2 8 25 17 SP101 4/24/2025 1:56:23 AM 666335 5113 55 6IN_SLIP Grade1 HeaderUniqueId 666335 6IN_SLIP F 2/18-2/18 UniqueId 18 12 4.440 1 2.238 12 4.320 1 2.249 1.176 0.357 0.064 0.243 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0.660 0.622 0.589 0.016 0.645 0.615 0.584 0.016 0.278 0.070 0.048 0.044 NA NA NA NA 0 0.000 0 NA NA NA NA 0.000 NA NA NA NA 0 0.000 0 0.000 1.732 0.093 0.000 0.361 14 4.840 1 2.577 14 4.840 1 2.577 0.786 0.250 0.073 0.154 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0.477 0.440 0.411 0.019 0.476 0.437 0.408 0.019 0.187 0.032 0.017 0.033 NA NA NA NA 0 0.000 0 NA NA NA NA 0.000 NA NA NA NA NA NA NA NA NA NA NA NA 4 1.560 0 1.083 4 1.560 0 1.083 0.042 0.007 0.000 0.012 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0.218 0.182 0.151 0.016 0.200 0.168 0.137 0.017 0.108 0.065 0.053 0.010 NA NA NA NA 0 0.000 0 NA NA NA NA 0.000 NA NA NA NA NA NA NA NA NA NA NA NA 0.467 5 0 0 0 0 0 0 0 0 0.638 0.635 0.048 0 NA NA NA 0 0.000 0.308 5 0 0 0 0 0 0 0 0 0.439 0.436 0.021 0 NA NA NA NA NA 0.000 3 0 0 0 0 0 0 0 0 0.199 0.191 0.053 0 NA NA NA NA NA
0.00 1 2 8 25 18 SP101 4/24/2025 1:56:23 AM 666335 5113 55 6IN_SLIP Grade1 HeaderUniqueId 666335 6IN_SLIP F 2/19-2/19 UniqueId 19 12 4.440 1 2.238 12 4.320 1 2.249 1.176 0.357 0.064 0.243 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0.660 0.622 0.589 0.016 0.645 0.615 0.584 0.016 0.278 0.070 0.048 0.044 NA NA NA NA 0 0.000 0 NA NA NA NA 0.000 NA NA NA NA 0 0.000 0 0.000 1.732 0.093 0.000 0.361 14 4.840 1 2.577 14 4.840 1 2.577 0.786 0.250 0.073 0.154 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0.477 0.440 0.411 0.019 0.476 0.437 0.408 0.019 0.187 0.032 0.017 0.033 NA NA NA NA 0 0.000 0 NA NA NA NA 0.000 NA NA NA NA NA NA NA NA NA NA NA NA 4 1.560 0 1.083 4 1.560 0 1.083 0.042 0.007 0.000 0.012 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0.218 0.182 0.151 0.016 0.200 0.168 0.137 0.017 0.108 0.065 0.053 0.010 NA NA NA NA 0 0.000 0 NA NA NA NA 0.000 NA NA NA NA NA NA NA NA NA NA NA NA 0.282 6 0 0 0 0 0 0 0 0 0.624 0.622 0.050 0 NA NA NA 0 0.000 0.247 6 0 0 0 0 0 0 0 0 0.423 0.416 0.027 0 NA NA NA NA NA 0.000 1 0 0 0 0 0 0 0 0 0.201 0.193 0.058 0 NA NA NA NA NA
0.00 1 2 8 25 19 SP101 4/24/2025 1:56:23 AM 666335 5113 55 6IN_SLIP Grade1 HeaderUniqueId 666335 6IN_SLIP F 2/20-2/20 UniqueId 20 12 4.440 1 2.238 12 4.320 1 2.249 1.176 0.357 0.064 0.243 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0.660 0.622 0.589 0.016 0.645 0.615 0.584 0.016 0.278 0.070 0.048 0.044 NA NA NA NA 0 0.000 0 NA NA NA NA 0.000 NA NA NA NA 0 0.000 0 0.000 1.732 0.093 0.000 0.361 14 4.840 1 2.577 14 4.840 1 2.577 0.786 0.250 0.073 0.154 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0.477 0.440 0.411 0.019 0.476 0.437 0.408 0.019 0.187 0.032 0.017 0.033 NA NA NA NA 0 0.000 0 NA NA NA NA 0.000 NA NA NA NA NA NA NA NA NA NA NA NA 4 1.560 0 1.083 4 1.560 0 1.083 0.042 0.007 0.000 0.012 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0.218 0.182 0.151 0.016 0.200 0.168 0.137 0.017 0.108 0.065 0.053 0.010 NA NA NA NA 0 0.000 0 NA NA NA NA 0.000 NA NA NA NA NA NA NA NA NA NA NA NA 1.176 12 0 0 0 0 0 0 0 0 0.619 0.617 0.054 0 NA NA NA 0 0.000 0.786 14 0 0 0 0 0 0 0 0 0.411 0.408 0.026 0 NA NA NA NA NA 0.000 3 0 0 0 0 0 0 0 0 0.208 0.198 0.061 0 NA NA NA NA NA
0.00 1 2 8 25 20 SP101 4/24/2025 1:56:23 AM 666335 5113 55 6IN_SLIP Grade1 HeaderUniqueId 666335 6IN_SLIP F 2/21-2/21 UniqueId 21 12 4.440 1 2.238 12 4.320 1 2.249 1.176 0.357 0.064 0.243 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0.660 0.622 0.589 0.016 0.645 0.615 0.584 0.016 0.278 0.070 0.048 0.044 NA NA NA NA 0 0.000 0 NA NA NA NA 0.000 NA NA NA NA 0 0.000 0 0.000 1.732 0.093 0.000 0.361 14 4.840 1 2.577 14 4.840 1 2.577 0.786 0.250 0.073 0.154 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0.477 0.440 0.411 0.019 0.476 0.437 0.408 0.019 0.187 0.032 0.017 0.033 NA NA NA NA 0 0.000 0 NA NA NA NA 0.000 NA NA NA NA NA NA NA NA NA NA NA NA 4 1.560 0 1.083 4 1.560 0 1.083 0.042 0.007 0.000 0.012 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0.218 0.182 0.151 0.016 0.200 0.168 0.137 0.017 0.108 0.065 0.053 0.010 NA NA NA NA 0 0.000 0 NA NA NA NA 0.000 NA NA NA NA NA NA NA NA NA NA NA NA 0.170 3 0 0 0 0 0 0 0 0 0.589 0.584 0.064 0 NA NA NA 0 0.000 0.135 3 0 0 0 0 0 0 0 0 0.416 0.416 0.023 0 NA NA NA NA NA 0.000 1 0 0 0 0 0 0 0 0 0.173 0.165 0.067 0 NA NA NA NA NA
0.00 1 2 8 25 21 SP101 4/24/2025 1:56:23 AM 666335 5113 55 6IN_SLIP Grade1 HeaderUniqueId 666335 6IN_SLIP F 2/22-2/22 UniqueId 22 12 4.440 1 2.238 12 4.320 1 2.249 1.176 0.357 0.064 0.243 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0.660 0.622 0.589 0.016 0.645 0.615 0.584 0.016 0.278 0.070 0.048 0.044 NA NA NA NA 0 0.000 0 NA NA NA NA 0.000 NA NA NA NA 0 0.000 0 0.000 1.732 0.093 0.000 0.361 14 4.840 1 2.577 14 4.840 1 2.577 0.786 0.250 0.073 0.154 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0.477 0.440 0.411 0.019 0.476 0.437 0.408 0.019 0.187 0.032 0.017 0.033 NA NA NA NA 0 0.000 0 NA NA NA NA 0.000 NA NA NA NA NA NA NA NA NA NA NA NA 4 1.560 0 1.083 4 1.560 0 1.083 0.042 0.007 0.000 0.012 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0.218 0.182 0.151 0.016 0.200 0.168 0.137 0.017 0.108 0.065 0.053 0.010 NA NA NA NA 0 0.000 0 NA NA NA NA 0.000 NA NA NA NA NA NA NA NA NA NA NA NA 0.407 4 0 0 0 0 0 0 0 0 0.602 0.596 0.058 0 NA NA NA 0 0.000 0.269 4 0 0 0 0 0 0 0 0 0.422 0.418 0.027 0 NA NA NA NA NA 0.000 1 0 0 0 0 0 0 0 0 0.181 0.167 0.066 0 NA NA NA NA NA
0.00 1 2 8 25 22 SP101 4/24/2025 1:56:23 AM 666335 5113 55 6IN_SLIP Grade1 HeaderUniqueId 666335 6IN_SLIP F 2/23-2/23 UniqueId 23 12 4.440 1 2.238 12 4.320 1 2.249 1.176 0.357 0.064 0.243 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0.660 0.622 0.589 0.016 0.645 0.615 0.584 0.016 0.278 0.070 0.048 0.044 NA NA NA NA 0 0.000 0 NA NA NA NA 0.000 NA NA NA NA 0 0.000 0 0.000 1.732 0.093 0.000 0.361 14 4.840 1 2.577 14 4.840 1 2.577 0.786 0.250 0.073 0.154 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0.477 0.440 0.411 0.019 0.476 0.437 0.408 0.019 0.187 0.032 0.017 0.033 NA NA NA NA 0 0.000 0 NA NA NA NA 0.000 NA NA NA NA NA NA NA NA NA NA NA NA 4 1.560 0 1.083 4 1.560 0 1.083 0.042 0.007 0.000 0.012 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0.218 0.182 0.151 0.016 0.200 0.168 0.137 0.017 0.108 0.065 0.053 0.010 NA NA NA NA 0 0.000 0 NA NA NA NA 0.000 NA NA NA NA NA NA NA NA NA NA NA NA 0.516 4 0 0 0 0 0 0 0 0 0.609 0.603 0.063 0 NA NA NA 0 0.000 0.319 4 0 0 0 0 0 0 0 0 0.415 0.413 0.024 0 NA NA NA NA NA 0.000 1 0 0 0 0 0 0 0 0 0.194 0.181 0.058 0 NA NA NA NA NA
0.00 1 2 8 25 23 SP101 4/24/2025 1:56:23 AM 666335 5113 55 6IN_SLIP Grade1 HeaderUniqueId 666335 6IN_SLIP F 2/24-2/24 UniqueId 24 12 4.440 1 2.238 12 4.320 1 2.249 1.176 0.357 0.064 0.243 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0.660 0.622 0.589 0.016 0.645 0.615 0.584 0.016 0.278 0.070 0.048 0.044 NA NA NA NA 0 0.000 0 NA NA NA NA 0.000 NA NA NA NA 0 0.000 0 0.000 1.732 0.093 0.000 0.361 14 4.840 1 2.577 14 4.840 1 2.577 0.786 0.250 0.073 0.154 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0.477 0.440 0.411 0.019 0.476 0.437 0.408 0.019 0.187 0.032 0.017 0.033 NA NA NA NA 0 0.000 0 NA NA NA NA 0.000 NA NA NA NA NA NA NA NA NA NA NA NA 4 1.560 0 1.083 4 1.560 0 1.083 0.042 0.007 0.000 0.012 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0.218 0.182 0.151 0.016 0.200 0.168 0.137 0.017 0.108 0.065 0.053 0.010 NA NA NA NA 0 0.000 0 NA NA NA NA 0.000 NA NA NA NA NA NA NA NA NA NA NA NA 0.180 4 0 0 0 0 0 0 0 0 0.614 0.606 0.067 0 NA NA NA 0 1.732 0.178 6 0 0 0 0 0 0 0 0 0.418 0.415 0.023 0 NA NA NA NA NA 0.000 2 0 0 0 0 0 0 0 0 0.196 0.179 0.060 0 NA NA NA NA NA
0.00 1 2 8 25 24 SP101 4/24/2025 1:56:23 AM 666335 5113 55 6IN_SLIP Grade1 HeaderUniqueId 666335 6IN_SLIP F 2/25-2/25 UniqueId 25 12 4.440 1 2.238 12 4.320 1 2.249 1.176 0.357 0.064 0.243 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0.660 0.622 0.589 0.016 0.645 0.615 0.584 0.016 0.278 0.070 0.048 0.044 NA NA NA NA 0 0.000 0 NA NA NA NA 0.000 NA NA NA NA 0 0.000 0 0.000 1.732 0.093 0.000 0.361 14 4.840 1 2.577 14 4.840 1 2.577 0.786 0.250 0.073 0.154 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0.477 0.440 0.411 0.019 0.476 0.437 0.408 0.019 0.187 0.032 0.017 0.033 NA NA NA NA 0 0.000 0 NA NA NA NA 0.000 NA NA NA NA NA NA NA NA NA NA NA NA 4 1.560 0 1.083 4 1.560 0 1.083 0.042 0.007 0.000 0.012 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0 0.000 0.218 0.182 0.151 0.016 0.200 0.168 0.137 0.017 0.108 0.065 0.053 0.010 NA NA NA NA 0 0.000 0 NA NA NA NA 0.000 NA NA NA NA NA NA NA NA NA NA NA NA 0.152 4 0 0 0 0 0 0 0 0 0.633 0.622 0.278 0 NA NA NA 0 0.000 0.128 4 0 0 0 0 0 0 0 0 0.415 0.414 0.187 0 NA NA NA NA NA 0.042 1 0 0 0 0 0 0 0 0 0.218 0.200 0.108 0 NA NA NA NA NA
NUM_DATA_ROWS 000000025
NUM_DATA_COLUMNS 000000321
DELIMITER ;
START_TIME_FORMAT MM/dd/yyyy HH:mm:ss
START_TIME 04/24/2025 01:56:23
LOGISTICS_COLUMN A_LOGISTICS
LOGISTICS_COLUMN B_LOGISTICS
LOGISTICS_1 A_BASIC_TYPE=;A_INFO=6IN_SLIP_20250424_0127_2025-04-24_01;56;37;581.txt.csv;A_INFO2=25;A_JOBID=SP101;A_MES_ENTITY=SP101;A_MID=55-666335-5113;A_NULL_DATA=;A_PPID=NO_PPID;A_PROCESS_JOBID=;A_PRODUCT=;A_SEQUENCE=638810565835457504;A_WAFER_ID=;A_WAFER_POS=;
LOGISTICS_2 B_BASIC_TYPE=Left - High Thruput;B_INFO=-;B_INFO2=;B_JOBID=;B_MES_ENTITY=;B_MID=666335;B_NULL_DATA=;B_PPID=6IN_SLIP;B_PROCESS_JOBID=55;B_PRODUCT=5113;B_SEQUENCE=638810565835457504;B_WAFER_ID=-;B_WAFER_POS=-;
EOF
HEADER_TAG|HEADER_VALUE
FORMAT|2.00
NUMBER_PASSES|0001
HEADER_OFFSET|000037963
DATA_OFFSET|000000128
END_OFFSET|000038659
|Time|A_LOGISTICS|B_LOGISTICS|Count|Sequence|MesEntity|Index|Lot|Session|DcnAllMin|DcnLpdMin|DcnLpdNMin|DcnLpdESMin|DcnMicroScrMin|DcnScrMin|DcnSlipMin|DcnAreaCountMin|DcnAreaMin|DcnHazeAvgMin|DcnHazeMedianMin|DcnHazeStdDevMin|DcnBin1Min|DcnBin2Min|DcnBin3Min|DcnBin4Min|DcnBin5Min|DcnBin6Min|DcnBin7Min|DcnBin8Min|DcnAllMax|DcnLpdMax|DcnLpdNMax|DcnLpdESMax|DcnMicroScrMax|DcnScrMax|DcnSlipMax|DcnAreaCountMax|DcnAreaMax|DcnHazeAvgMax|DcnHazeMedianMax|DcnHazeStdDevMax|DcnBin1Max|DcnBin2Max|DcnBin3Max|DcnBin4Max|DcnBin5Max|DcnBin6Max|DcnBin7Max|DcnBin8Max|DcnAllMean|DcnLpdMean|DcnLpdNMean|DcnLpdESMean|DcnMicroScrMean|DcnScrMean|DcnSlipMean|DcnAreaCountMean|DcnAreaMean|DcnHazeAvgMean|DcnHazeMedianMean|DcnHazeStdDevMean|DcnBin1Mean|DcnBin2Mean|DcnBin3Mean|DcnBin4Mean|DcnBin5Mean|DcnBin6Mean|DcnBin7Mean|DcnBin8Mean|DcnAllStdDev|DcnLpdStdDev|DcnLpdNStdDev|DcnLpdESStdDev|DcnMicroScrStdDev|DcnScrStdDev|DcnSlipStdDev|DcnAreaCountStdDev|DcnAreaStdDev|DcnHazeAvgStdDev|DcnHazeMedianStdDev|DcnHazeStdDevStdDev|DcnBin1StdDev|DcnBin2StdDev|DcnBin3StdDev|DcnBin4StdDev|DcnBin5StdDev|DcnBin6StdDev|DcnBin7StdDev|DcnBin8StdDev|DwnAllMin|DwnLpdMin|DwnLpdNMin|DwnLpdESMin|DwnMicroScrMin|DwnScrMin|DwnSlipMin|DwnAreaCountMin|DwnAreaMin|DwnHazeAvgMin|DwnHazeMedianMin|DwnHazeStdDevMin|DwnBin1Min|DwnBin2Min|DwnBin3Min|DwnBin4Min|DwnBin5Min|DwnBin6Min|DwnBin7Min|DwnBin8Min|DwnAllMax|DwnLpdMax|DwnLpdNMax|DwnLpdESMax|DwnMicroScrMax|DwnScrMax|DwnSlipMax|DwnAreaCountMax|DwnAreaMax|DwnHazeAvgMax|DwnHazeMedianMax|DwnHazeStdDevMax|DwnBin1Max|DwnBin2Max|DwnBin3Max|DwnBin4Max|DwnBin5Max|DwnBin6Max|DwnBin7Max|DwnBin8Max|DwnAllMean|DwnLpdMean|DwnLpdNMean|DwnLpdESMean|DwnMicroScrMean|DwnScrMean|DwnSlipMean|DwnAreaCountMean|DwnAreaMean|DwnHazeAvgMean|DwnHazeMedianMean|DwnHazeStdDevMean|DwnBin1Mean|DwnBin2Mean|DwnBin3Mean|DwnBin4Mean|DwnBin5Mean|DwnBin6Mean|DwnBin7Mean|DwnBin8Mean|DwnAllStdDev|DwnLpdStdDev|DwnLpdNStdDev|DwnLpdESStdDev|DwnMicroScrStdDev|DwnScrStdDev|DwnSlipStdDev|DwnAreaCountStdDev|DwnAreaStdDev|DwnHazeAvgStdDev|DwnHazeMedianStdDev|DwnHazeStdDevStdDev|DwnBin1StdDev|DwnBin2StdDev|DwnBin3StdDev|DwnBin4StdDev|DwnBin5StdDev|DwnBin6StdDev|DwnBin7StdDev|DwnBin8StdDev|DnnAllMin|DnnLpdMin|DnnLpdNMin|DnnLpdESMin|DnnMicroScrMin|DnnScrMin|DnnSlipMin|DnnAreaCountMin|DnnAreaMin|DnnHazeAvgMin|DnnHazeMedianMin|DnnHazeStdDevMin|DnnBin1Min|DnnBin2Min|DnnBin3Min|DnnBin4Min|DnnBin5Min|DnnBin6Min|DnnBin7Min|DnnBin8Min|DnnAllMax|DnnLpdMax|DnnLpdNMax|DnnLpdESMax|DnnMicroScrMax|DnnScrMax|DnnSlipMax|DnnAreaCountMax|DnnAreaMax|DnnHazeAvgMax|DnnHazeMedianMax|DnnHazeStdDevMax|DnnBin1Max|DnnBin2Max|DnnBin3Max|DnnBin4Max|DnnBin5Max|DnnBin6Max|DnnBin7Max|DnnBin8Max|DnnAllMean|DnnLpdMean|DnnLpdNMean|DnnLpdESMean|DnnMicroScrMean|DnnScrMean|DnnSlipMean|DnnAreaCountMean|DnnAreaMean|DnnHazeAvgMean|DnnHazeMedianMean|DnnHazeStdDevMean|DnnBin1Mean|DnnBin2Mean|DnnBin3Mean|DnnBin4Mean|DnnBin5Mean|DnnBin6Mean|DnnBin7Mean|DnnBin8Mean|DnnAllStdDev|DnnLpdStdDev|DnnLpdNStdDev|DnnLpdESStdDev|DnnMicroScrStdDev|DnnScrStdDev|DnnSlipStdDev|DnnAreaCountStdDev|DnnAreaStdDev|DnnHazeAvgStdDev|DnnHazeMedianStdDev|DnnHazeStdDevStdDev|DnnBin1StdDev|DnnBin2StdDev|DnnBin3StdDev|DnnBin4StdDev|DnnBin5StdDev|DnnBin6StdDev|DnnBin7StdDev|DnnBin8StdDev|Side|WaferID|Grade|SrcDest|DcnAll|DcnLpd|DcnLpdN|DcnLpdES|DcnMicroScr|DcnScr|DcnSlip|DcnAreaCount|DcnArea|DcnHazeAvg|DcnHazeMedian|DcnHazeStdDev|DcnBin1|DcnBin2|DcnBin3|DcnBin4|DcnBin5|DcnBin6|DcnBin7|DcnBin8|DwnAll|DwnLpd|DwnLpdN|DwnLpdES|DwnMicroScr|DwnScr|DwnSlip|DwnAreaCount|DwnArea|DwnHazeAvg|DwnHazeMedian|DwnHazeStdDev|DwnBin1|DwnBin2|DwnBin3|DwnBin4|DwnBin5|DwnBin6|DwnBin7|DwnBin8|DnnAll|DnnLpd|DnnLpdN|DnnLpdES|DnnMicroScr|DnnScr|DnnSlip|DnnAreaCount|DnnArea|DnnHazeAvg|DnnHazeMedian|DnnHazeStdDev|DnnBin1|DnnBin2|DnnBin3|DnnBin4|DnnBin5|DnnBin6|DnnBin7|DnnBin8|RDS|PSN|Reactor|Layer|Zone|Employee|InferredLot|Date|EventId|
|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|
0.00|1|2|25|638810565835457504|SP101|0|666335|6IN_SLIP|1|0|NA|NA|NA|0|0.000|1|0.064|0.589|0.584|0.048|0|0|0|0|0|0|0|0|12|0|NA|NA|NA|0|1.732|12|1.176|0.660|0.645|0.278|0|0|0|0|0|0|0|0|4.440|0.000|NA|NA|NA|0.000|0.093|4.320|0.357|0.622|0.615|0.070|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|2.238|0.000|NA|NA|NA|0.000|0.361|2.249|0.243|0.016|0.016|0.044|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0|0|NA|NA|NA|NA|NA|0|0.000|0.151|0.137|0.053|0|0|0|0|0|0|0|0|4|0|NA|NA|NA|NA|NA|4|0.042|0.218|0.200|0.108|0|0|0|0|0|0|0|0|1.560|0.000|NA|NA|NA|NA|NA|1.560|0.007|0.182|0.168|0.065|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|1.083|0.000|NA|NA|NA|NA|NA|1.083|0.012|0.016|0.017|0.010|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|1|0|NA|NA|NA|NA|NA|1|0.073|0.411|0.408|0.017|0|0|0|0|0|0|0|0|14|0|NA|NA|NA|NA|NA|14|0.786|0.477|0.476|0.187|0|0|0|0|0|0|0|0|4.840|0.000|NA|NA|NA|NA|NA|4.840|0.250|0.440|0.437|0.032|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|2.577|0.000|NA|NA|NA|NA|NA|2.577|0.154|0.019|0.019|0.033|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|F|1|Grade1|2/1-2/1||0|NA|NA|NA|0|0.000|2|0.230|0.640|0.636|0.061|0|0|0|0|0|0|0|0||0|NA|NA|NA|NA|NA|0|0.000|0.192|0.179|0.066|0|0|0|0|0|0|0|0||0|NA|NA|NA|NA|NA|4|0.155|0.448|0.443|0.028|0|0|0|0|0|0|0|0|666335|5113|55|-|-||55-666335-5113|4/24/2025 1:56:23 AM|8
0.00|1|2|25|638810565835457504|SP101|1|666335|6IN_SLIP|1|0|NA|NA|NA|0|0.000|1|0.064|0.589|0.584|0.048|0|0|0|0|0|0|0|0|12|0|NA|NA|NA|0|1.732|12|1.176|0.660|0.645|0.278|0|0|0|0|0|0|0|0|4.440|0.000|NA|NA|NA|0.000|0.093|4.320|0.357|0.622|0.615|0.070|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|2.238|0.000|NA|NA|NA|0.000|0.361|2.249|0.243|0.016|0.016|0.044|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0|0|NA|NA|NA|NA|NA|0|0.000|0.151|0.137|0.053|0|0|0|0|0|0|0|0|4|0|NA|NA|NA|NA|NA|4|0.042|0.218|0.200|0.108|0|0|0|0|0|0|0|0|1.560|0.000|NA|NA|NA|NA|NA|1.560|0.007|0.182|0.168|0.065|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|1.083|0.000|NA|NA|NA|NA|NA|1.083|0.012|0.016|0.017|0.010|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|1|0|NA|NA|NA|NA|NA|1|0.073|0.411|0.408|0.017|0|0|0|0|0|0|0|0|14|0|NA|NA|NA|NA|NA|14|0.786|0.477|0.476|0.187|0|0|0|0|0|0|0|0|4.840|0.000|NA|NA|NA|NA|NA|4.840|0.250|0.440|0.437|0.032|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|2.577|0.000|NA|NA|NA|NA|NA|2.577|0.154|0.019|0.019|0.033|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|F|2|Grade1|2/2-2/2||0|NA|NA|NA|0|0.581|2|0.064|0.644|0.636|0.058|0|0|0|0|0|0|0|0||0|NA|NA|NA|NA|NA|0|0.000|0.185|0.169|0.062|0|0|0|0|0|0|0|0||0|NA|NA|NA|NA|NA|4|0.073|0.459|0.456|0.024|0|0|0|0|0|0|0|0|666335|5113|55|-|-||55-666335-5113|4/24/2025 1:56:23 AM|8
0.00|1|2|25|638810565835457504|SP101|2|666335|6IN_SLIP|1|0|NA|NA|NA|0|0.000|1|0.064|0.589|0.584|0.048|0|0|0|0|0|0|0|0|12|0|NA|NA|NA|0|1.732|12|1.176|0.660|0.645|0.278|0|0|0|0|0|0|0|0|4.440|0.000|NA|NA|NA|0.000|0.093|4.320|0.357|0.622|0.615|0.070|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|2.238|0.000|NA|NA|NA|0.000|0.361|2.249|0.243|0.016|0.016|0.044|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0|0|NA|NA|NA|NA|NA|0|0.000|0.151|0.137|0.053|0|0|0|0|0|0|0|0|4|0|NA|NA|NA|NA|NA|4|0.042|0.218|0.200|0.108|0|0|0|0|0|0|0|0|1.560|0.000|NA|NA|NA|NA|NA|1.560|0.007|0.182|0.168|0.065|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|1.083|0.000|NA|NA|NA|NA|NA|1.083|0.012|0.016|0.017|0.010|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|1|0|NA|NA|NA|NA|NA|1|0.073|0.411|0.408|0.017|0|0|0|0|0|0|0|0|14|0|NA|NA|NA|NA|NA|14|0.786|0.477|0.476|0.187|0|0|0|0|0|0|0|0|4.840|0.000|NA|NA|NA|NA|NA|4.840|0.250|0.440|0.437|0.032|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|2.577|0.000|NA|NA|NA|NA|NA|2.577|0.154|0.019|0.019|0.033|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|F|3|Grade1|2/3-2/3||0|NA|NA|NA|0|0.000|7|0.345|0.615|0.601|0.070|0|0|0|0|0|0|0|0||0|NA|NA|NA|NA|NA|4|0.000|0.165|0.145|0.068|0|0|0|0|0|0|0|0||0|NA|NA|NA|NA|NA|9|0.284|0.449|0.447|0.017|0|0|0|0|0|0|0|0|666335|5113|55|-|-||55-666335-5113|4/24/2025 1:56:23 AM|8
0.00|1|2|25|638810565835457504|SP101|3|666335|6IN_SLIP|1|0|NA|NA|NA|0|0.000|1|0.064|0.589|0.584|0.048|0|0|0|0|0|0|0|0|12|0|NA|NA|NA|0|1.732|12|1.176|0.660|0.645|0.278|0|0|0|0|0|0|0|0|4.440|0.000|NA|NA|NA|0.000|0.093|4.320|0.357|0.622|0.615|0.070|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|2.238|0.000|NA|NA|NA|0.000|0.361|2.249|0.243|0.016|0.016|0.044|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0|0|NA|NA|NA|NA|NA|0|0.000|0.151|0.137|0.053|0|0|0|0|0|0|0|0|4|0|NA|NA|NA|NA|NA|4|0.042|0.218|0.200|0.108|0|0|0|0|0|0|0|0|1.560|0.000|NA|NA|NA|NA|NA|1.560|0.007|0.182|0.168|0.065|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|1.083|0.000|NA|NA|NA|NA|NA|1.083|0.012|0.016|0.017|0.010|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|1|0|NA|NA|NA|NA|NA|1|0.073|0.411|0.408|0.017|0|0|0|0|0|0|0|0|14|0|NA|NA|NA|NA|NA|14|0.786|0.477|0.476|0.187|0|0|0|0|0|0|0|0|4.840|0.000|NA|NA|NA|NA|NA|4.840|0.250|0.440|0.437|0.032|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|2.577|0.000|NA|NA|NA|NA|NA|2.577|0.154|0.019|0.019|0.033|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|F|4|Grade1|2/4-2/4||0|NA|NA|NA|0|0.000|4|0.284|0.631|0.625|0.065|0|0|0|0|0|0|0|0||0|NA|NA|NA|NA|NA|1|0.000|0.181|0.166|0.062|0|0|0|0|0|0|0|0||0|NA|NA|NA|NA|NA|4|0.192|0.450|0.448|0.026|0|0|0|0|0|0|0|0|666335|5113|55|-|-||55-666335-5113|4/24/2025 1:56:23 AM|8
0.00|1|2|25|638810565835457504|SP101|4|666335|6IN_SLIP|1|0|NA|NA|NA|0|0.000|1|0.064|0.589|0.584|0.048|0|0|0|0|0|0|0|0|12|0|NA|NA|NA|0|1.732|12|1.176|0.660|0.645|0.278|0|0|0|0|0|0|0|0|4.440|0.000|NA|NA|NA|0.000|0.093|4.320|0.357|0.622|0.615|0.070|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|2.238|0.000|NA|NA|NA|0.000|0.361|2.249|0.243|0.016|0.016|0.044|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0|0|NA|NA|NA|NA|NA|0|0.000|0.151|0.137|0.053|0|0|0|0|0|0|0|0|4|0|NA|NA|NA|NA|NA|4|0.042|0.218|0.200|0.108|0|0|0|0|0|0|0|0|1.560|0.000|NA|NA|NA|NA|NA|1.560|0.007|0.182|0.168|0.065|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|1.083|0.000|NA|NA|NA|NA|NA|1.083|0.012|0.016|0.017|0.010|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|1|0|NA|NA|NA|NA|NA|1|0.073|0.411|0.408|0.017|0|0|0|0|0|0|0|0|14|0|NA|NA|NA|NA|NA|14|0.786|0.477|0.476|0.187|0|0|0|0|0|0|0|0|4.840|0.000|NA|NA|NA|NA|NA|4.840|0.250|0.440|0.437|0.032|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|2.577|0.000|NA|NA|NA|NA|NA|2.577|0.154|0.019|0.019|0.033|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|F|5|Grade1|2/5-2/5||0|NA|NA|NA|0|0.000|2|0.298|0.624|0.612|0.065|0|0|0|0|0|0|0|0||0|NA|NA|NA|NA|NA|2|0.028|0.170|0.153|0.061|0|0|0|0|0|0|0|0||0|NA|NA|NA|NA|NA|2|0.202|0.453|0.452|0.026|0|0|0|0|0|0|0|0|666335|5113|55|-|-||55-666335-5113|4/24/2025 1:56:23 AM|8
0.00|1|2|25|638810565835457504|SP101|5|666335|6IN_SLIP|1|0|NA|NA|NA|0|0.000|1|0.064|0.589|0.584|0.048|0|0|0|0|0|0|0|0|12|0|NA|NA|NA|0|1.732|12|1.176|0.660|0.645|0.278|0|0|0|0|0|0|0|0|4.440|0.000|NA|NA|NA|0.000|0.093|4.320|0.357|0.622|0.615|0.070|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|2.238|0.000|NA|NA|NA|0.000|0.361|2.249|0.243|0.016|0.016|0.044|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0|0|NA|NA|NA|NA|NA|0|0.000|0.151|0.137|0.053|0|0|0|0|0|0|0|0|4|0|NA|NA|NA|NA|NA|4|0.042|0.218|0.200|0.108|0|0|0|0|0|0|0|0|1.560|0.000|NA|NA|NA|NA|NA|1.560|0.007|0.182|0.168|0.065|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|1.083|0.000|NA|NA|NA|NA|NA|1.083|0.012|0.016|0.017|0.010|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|1|0|NA|NA|NA|NA|NA|1|0.073|0.411|0.408|0.017|0|0|0|0|0|0|0|0|14|0|NA|NA|NA|NA|NA|14|0.786|0.477|0.476|0.187|0|0|0|0|0|0|0|0|4.840|0.000|NA|NA|NA|NA|NA|4.840|0.250|0.440|0.437|0.032|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|2.577|0.000|NA|NA|NA|NA|NA|2.577|0.154|0.019|0.019|0.033|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|F|6|Grade1|2/6-2/6||0|NA|NA|NA|0|0.000|1|0.119|0.650|0.641|0.060|0|0|0|0|0|0|0|0||0|NA|NA|NA|NA|NA|1|0.000|0.182|0.166|0.066|0|0|0|0|0|0|0|0||0|NA|NA|NA|NA|NA|1|0.083|0.468|0.467|0.027|0|0|0|0|0|0|0|0|666335|5113|55|-|-||55-666335-5113|4/24/2025 1:56:23 AM|8
0.00|1|2|25|638810565835457504|SP101|6|666335|6IN_SLIP|1|0|NA|NA|NA|0|0.000|1|0.064|0.589|0.584|0.048|0|0|0|0|0|0|0|0|12|0|NA|NA|NA|0|1.732|12|1.176|0.660|0.645|0.278|0|0|0|0|0|0|0|0|4.440|0.000|NA|NA|NA|0.000|0.093|4.320|0.357|0.622|0.615|0.070|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|2.238|0.000|NA|NA|NA|0.000|0.361|2.249|0.243|0.016|0.016|0.044|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0|0|NA|NA|NA|NA|NA|0|0.000|0.151|0.137|0.053|0|0|0|0|0|0|0|0|4|0|NA|NA|NA|NA|NA|4|0.042|0.218|0.200|0.108|0|0|0|0|0|0|0|0|1.560|0.000|NA|NA|NA|NA|NA|1.560|0.007|0.182|0.168|0.065|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|1.083|0.000|NA|NA|NA|NA|NA|1.083|0.012|0.016|0.017|0.010|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|1|0|NA|NA|NA|NA|NA|1|0.073|0.411|0.408|0.017|0|0|0|0|0|0|0|0|14|0|NA|NA|NA|NA|NA|14|0.786|0.477|0.476|0.187|0|0|0|0|0|0|0|0|4.840|0.000|NA|NA|NA|NA|NA|4.840|0.250|0.440|0.437|0.032|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|2.577|0.000|NA|NA|NA|NA|NA|2.577|0.154|0.019|0.019|0.033|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|F|7|Grade1|2/7-2/7||0|NA|NA|NA|0|0.000|5|0.293|0.660|0.645|0.072|0|0|0|0|0|0|0|0||0|NA|NA|NA|NA|NA|1|0.000|0.182|0.164|0.072|0|0|0|0|0|0|0|0||0|NA|NA|NA|NA|NA|5|0.222|0.477|0.476|0.018|0|0|0|0|0|0|0|0|666335|5113|55|-|-||55-666335-5113|4/24/2025 1:56:23 AM|8
0.00|1|2|25|638810565835457504|SP101|7|666335|6IN_SLIP|1|0|NA|NA|NA|0|0.000|1|0.064|0.589|0.584|0.048|0|0|0|0|0|0|0|0|12|0|NA|NA|NA|0|1.732|12|1.176|0.660|0.645|0.278|0|0|0|0|0|0|0|0|4.440|0.000|NA|NA|NA|0.000|0.093|4.320|0.357|0.622|0.615|0.070|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|2.238|0.000|NA|NA|NA|0.000|0.361|2.249|0.243|0.016|0.016|0.044|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0|0|NA|NA|NA|NA|NA|0|0.000|0.151|0.137|0.053|0|0|0|0|0|0|0|0|4|0|NA|NA|NA|NA|NA|4|0.042|0.218|0.200|0.108|0|0|0|0|0|0|0|0|1.560|0.000|NA|NA|NA|NA|NA|1.560|0.007|0.182|0.168|0.065|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|1.083|0.000|NA|NA|NA|NA|NA|1.083|0.012|0.016|0.017|0.010|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|1|0|NA|NA|NA|NA|NA|1|0.073|0.411|0.408|0.017|0|0|0|0|0|0|0|0|14|0|NA|NA|NA|NA|NA|14|0.786|0.477|0.476|0.187|0|0|0|0|0|0|0|0|4.840|0.000|NA|NA|NA|NA|NA|4.840|0.250|0.440|0.437|0.032|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|2.577|0.000|NA|NA|NA|NA|NA|2.577|0.154|0.019|0.019|0.033|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|F|8|Grade1|2/8-2/8||0|NA|NA|NA|0|0.000|5|0.530|0.608|0.596|0.059|0|0|0|0|0|0|0|0||0|NA|NA|NA|NA|NA|3|0.024|0.167|0.145|0.065|0|0|0|0|0|0|0|0||0|NA|NA|NA|NA|NA|7|0.309|0.442|0.437|0.030|0|0|0|0|0|0|0|0|666335|5113|55|-|-||55-666335-5113|4/24/2025 1:56:23 AM|8
0.00|1|2|25|638810565835457504|SP101|8|666335|6IN_SLIP|1|0|NA|NA|NA|0|0.000|1|0.064|0.589|0.584|0.048|0|0|0|0|0|0|0|0|12|0|NA|NA|NA|0|1.732|12|1.176|0.660|0.645|0.278|0|0|0|0|0|0|0|0|4.440|0.000|NA|NA|NA|0.000|0.093|4.320|0.357|0.622|0.615|0.070|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|2.238|0.000|NA|NA|NA|0.000|0.361|2.249|0.243|0.016|0.016|0.044|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0|0|NA|NA|NA|NA|NA|0|0.000|0.151|0.137|0.053|0|0|0|0|0|0|0|0|4|0|NA|NA|NA|NA|NA|4|0.042|0.218|0.200|0.108|0|0|0|0|0|0|0|0|1.560|0.000|NA|NA|NA|NA|NA|1.560|0.007|0.182|0.168|0.065|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|1.083|0.000|NA|NA|NA|NA|NA|1.083|0.012|0.016|0.017|0.010|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|1|0|NA|NA|NA|NA|NA|1|0.073|0.411|0.408|0.017|0|0|0|0|0|0|0|0|14|0|NA|NA|NA|NA|NA|14|0.786|0.477|0.476|0.187|0|0|0|0|0|0|0|0|4.840|0.000|NA|NA|NA|NA|NA|4.840|0.250|0.440|0.437|0.032|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|2.577|0.000|NA|NA|NA|NA|NA|2.577|0.154|0.019|0.019|0.033|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|F|9|Grade1|2/9-2/9||0|NA|NA|NA|0|0.000|3|0.138|0.607|0.598|0.086|0|0|0|0|0|0|0|0||0|NA|NA|NA|NA|NA|0|0.000|0.160|0.147|0.065|0|0|0|0|0|0|0|0||0|NA|NA|NA|NA|NA|3|0.113|0.448|0.444|0.043|0|0|0|0|0|0|0|0|666335|5113|55|-|-||55-666335-5113|4/24/2025 1:56:23 AM|8
0.00|1|2|25|638810565835457504|SP101|9|666335|6IN_SLIP|1|0|NA|NA|NA|0|0.000|1|0.064|0.589|0.584|0.048|0|0|0|0|0|0|0|0|12|0|NA|NA|NA|0|1.732|12|1.176|0.660|0.645|0.278|0|0|0|0|0|0|0|0|4.440|0.000|NA|NA|NA|0.000|0.093|4.320|0.357|0.622|0.615|0.070|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|2.238|0.000|NA|NA|NA|0.000|0.361|2.249|0.243|0.016|0.016|0.044|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0|0|NA|NA|NA|NA|NA|0|0.000|0.151|0.137|0.053|0|0|0|0|0|0|0|0|4|0|NA|NA|NA|NA|NA|4|0.042|0.218|0.200|0.108|0|0|0|0|0|0|0|0|1.560|0.000|NA|NA|NA|NA|NA|1.560|0.007|0.182|0.168|0.065|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|1.083|0.000|NA|NA|NA|NA|NA|1.083|0.012|0.016|0.017|0.010|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|1|0|NA|NA|NA|NA|NA|1|0.073|0.411|0.408|0.017|0|0|0|0|0|0|0|0|14|0|NA|NA|NA|NA|NA|14|0.786|0.477|0.476|0.187|0|0|0|0|0|0|0|0|4.840|0.000|NA|NA|NA|NA|NA|4.840|0.250|0.440|0.437|0.032|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|2.577|0.000|NA|NA|NA|NA|NA|2.577|0.154|0.019|0.019|0.033|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|F|10|Grade1|2/10-2/10||0|NA|NA|NA|0|0.000|5|0.501|0.627|0.618|0.060|0|0|0|0|0|0|0|0||0|NA|NA|NA|NA|NA|2|0.021|0.169|0.154|0.066|0|0|0|0|0|0|0|0||0|NA|NA|NA|NA|NA|5|0.347|0.459|0.453|0.027|0|0|0|0|0|0|0|0|666335|5113|55|-|-||55-666335-5113|4/24/2025 1:56:23 AM|8
0.00|1|2|25|638810565835457504|SP101|10|666335|6IN_SLIP|1|0|NA|NA|NA|0|0.000|1|0.064|0.589|0.584|0.048|0|0|0|0|0|0|0|0|12|0|NA|NA|NA|0|1.732|12|1.176|0.660|0.645|0.278|0|0|0|0|0|0|0|0|4.440|0.000|NA|NA|NA|0.000|0.093|4.320|0.357|0.622|0.615|0.070|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|2.238|0.000|NA|NA|NA|0.000|0.361|2.249|0.243|0.016|0.016|0.044|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0|0|NA|NA|NA|NA|NA|0|0.000|0.151|0.137|0.053|0|0|0|0|0|0|0|0|4|0|NA|NA|NA|NA|NA|4|0.042|0.218|0.200|0.108|0|0|0|0|0|0|0|0|1.560|0.000|NA|NA|NA|NA|NA|1.560|0.007|0.182|0.168|0.065|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|1.083|0.000|NA|NA|NA|NA|NA|1.083|0.012|0.016|0.017|0.010|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|1|0|NA|NA|NA|NA|NA|1|0.073|0.411|0.408|0.017|0|0|0|0|0|0|0|0|14|0|NA|NA|NA|NA|NA|14|0.786|0.477|0.476|0.187|0|0|0|0|0|0|0|0|4.840|0.000|NA|NA|NA|NA|NA|4.840|0.250|0.440|0.437|0.032|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|2.577|0.000|NA|NA|NA|NA|NA|2.577|0.154|0.019|0.019|0.033|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|F|11|Grade1|2/11-2/11||0|NA|NA|NA|0|0.000|7|0.498|0.611|0.604|0.057|0|0|0|0|0|0|0|0||0|NA|NA|NA|NA|NA|3|0.022|0.151|0.137|0.061|0|0|0|0|0|0|0|0||0|NA|NA|NA|NA|NA|7|0.342|0.461|0.461|0.020|0|0|0|0|0|0|0|0|666335|5113|55|-|-||55-666335-5113|4/24/2025 1:56:23 AM|8
0.00|1|2|25|638810565835457504|SP101|11|666335|6IN_SLIP|1|0|NA|NA|NA|0|0.000|1|0.064|0.589|0.584|0.048|0|0|0|0|0|0|0|0|12|0|NA|NA|NA|0|1.732|12|1.176|0.660|0.645|0.278|0|0|0|0|0|0|0|0|4.440|0.000|NA|NA|NA|0.000|0.093|4.320|0.357|0.622|0.615|0.070|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|2.238|0.000|NA|NA|NA|0.000|0.361|2.249|0.243|0.016|0.016|0.044|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0|0|NA|NA|NA|NA|NA|0|0.000|0.151|0.137|0.053|0|0|0|0|0|0|0|0|4|0|NA|NA|NA|NA|NA|4|0.042|0.218|0.200|0.108|0|0|0|0|0|0|0|0|1.560|0.000|NA|NA|NA|NA|NA|1.560|0.007|0.182|0.168|0.065|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|1.083|0.000|NA|NA|NA|NA|NA|1.083|0.012|0.016|0.017|0.010|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|1|0|NA|NA|NA|NA|NA|1|0.073|0.411|0.408|0.017|0|0|0|0|0|0|0|0|14|0|NA|NA|NA|NA|NA|14|0.786|0.477|0.476|0.187|0|0|0|0|0|0|0|0|4.840|0.000|NA|NA|NA|NA|NA|4.840|0.250|0.440|0.437|0.032|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|2.577|0.000|NA|NA|NA|NA|NA|2.577|0.154|0.019|0.019|0.033|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|F|12|Grade1|2/12-2/12||0|NA|NA|NA|0|0.000|3|0.311|0.617|0.608|0.059|0|0|0|0|0|0|0|0||0|NA|NA|NA|NA|NA|1|0.000|0.169|0.156|0.062|0|0|0|0|0|0|0|0||0|NA|NA|NA|NA|NA|3|0.197|0.448|0.444|0.022|0|0|0|0|0|0|0|0|666335|5113|55|-|-||55-666335-5113|4/24/2025 1:56:23 AM|8
0.00|1|2|25|638810565835457504|SP101|12|666335|6IN_SLIP|1|0|NA|NA|NA|0|0.000|1|0.064|0.589|0.584|0.048|0|0|0|0|0|0|0|0|12|0|NA|NA|NA|0|1.732|12|1.176|0.660|0.645|0.278|0|0|0|0|0|0|0|0|4.440|0.000|NA|NA|NA|0.000|0.093|4.320|0.357|0.622|0.615|0.070|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|2.238|0.000|NA|NA|NA|0.000|0.361|2.249|0.243|0.016|0.016|0.044|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0|0|NA|NA|NA|NA|NA|0|0.000|0.151|0.137|0.053|0|0|0|0|0|0|0|0|4|0|NA|NA|NA|NA|NA|4|0.042|0.218|0.200|0.108|0|0|0|0|0|0|0|0|1.560|0.000|NA|NA|NA|NA|NA|1.560|0.007|0.182|0.168|0.065|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|1.083|0.000|NA|NA|NA|NA|NA|1.083|0.012|0.016|0.017|0.010|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|1|0|NA|NA|NA|NA|NA|1|0.073|0.411|0.408|0.017|0|0|0|0|0|0|0|0|14|0|NA|NA|NA|NA|NA|14|0.786|0.477|0.476|0.187|0|0|0|0|0|0|0|0|4.840|0.000|NA|NA|NA|NA|NA|4.840|0.250|0.440|0.437|0.032|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|2.577|0.000|NA|NA|NA|NA|NA|2.577|0.154|0.019|0.019|0.033|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|F|13|Grade1|2/13-2/13||0|NA|NA|NA|0|0.000|4|0.254|0.623|0.619|0.059|0|0|0|0|0|0|0|0||0|NA|NA|NA|NA|NA|1|0.000|0.162|0.153|0.057|0|0|0|0|0|0|0|0||0|NA|NA|NA|NA|NA|4|0.191|0.461|0.458|0.023|0|0|0|0|0|0|0|0|666335|5113|55|-|-||55-666335-5113|4/24/2025 1:56:23 AM|8
0.00|1|2|25|638810565835457504|SP101|13|666335|6IN_SLIP|1|0|NA|NA|NA|0|0.000|1|0.064|0.589|0.584|0.048|0|0|0|0|0|0|0|0|12|0|NA|NA|NA|0|1.732|12|1.176|0.660|0.645|0.278|0|0|0|0|0|0|0|0|4.440|0.000|NA|NA|NA|0.000|0.093|4.320|0.357|0.622|0.615|0.070|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|2.238|0.000|NA|NA|NA|0.000|0.361|2.249|0.243|0.016|0.016|0.044|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0|0|NA|NA|NA|NA|NA|0|0.000|0.151|0.137|0.053|0|0|0|0|0|0|0|0|4|0|NA|NA|NA|NA|NA|4|0.042|0.218|0.200|0.108|0|0|0|0|0|0|0|0|1.560|0.000|NA|NA|NA|NA|NA|1.560|0.007|0.182|0.168|0.065|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|1.083|0.000|NA|NA|NA|NA|NA|1.083|0.012|0.016|0.017|0.010|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|1|0|NA|NA|NA|NA|NA|1|0.073|0.411|0.408|0.017|0|0|0|0|0|0|0|0|14|0|NA|NA|NA|NA|NA|14|0.786|0.477|0.476|0.187|0|0|0|0|0|0|0|0|4.840|0.000|NA|NA|NA|NA|NA|4.840|0.250|0.440|0.437|0.032|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|2.577|0.000|NA|NA|NA|NA|NA|2.577|0.154|0.019|0.019|0.033|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|F|14|Grade1|2/14-2/14||0|NA|NA|NA|0|0.000|5|0.445|0.622|0.615|0.057|0|0|0|0|0|0|0|0||0|NA|NA|NA|NA|NA|2|0.000|0.178|0.168|0.064|0|0|0|0|0|0|0|0||0|NA|NA|NA|NA|NA|5|0.316|0.444|0.440|0.025|0|0|0|0|0|0|0|0|666335|5113|55|-|-||55-666335-5113|4/24/2025 1:56:23 AM|8
0.00|1|2|25|638810565835457504|SP101|14|666335|6IN_SLIP|1|0|NA|NA|NA|0|0.000|1|0.064|0.589|0.584|0.048|0|0|0|0|0|0|0|0|12|0|NA|NA|NA|0|1.732|12|1.176|0.660|0.645|0.278|0|0|0|0|0|0|0|0|4.440|0.000|NA|NA|NA|0.000|0.093|4.320|0.357|0.622|0.615|0.070|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|2.238|0.000|NA|NA|NA|0.000|0.361|2.249|0.243|0.016|0.016|0.044|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0|0|NA|NA|NA|NA|NA|0|0.000|0.151|0.137|0.053|0|0|0|0|0|0|0|0|4|0|NA|NA|NA|NA|NA|4|0.042|0.218|0.200|0.108|0|0|0|0|0|0|0|0|1.560|0.000|NA|NA|NA|NA|NA|1.560|0.007|0.182|0.168|0.065|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|1.083|0.000|NA|NA|NA|NA|NA|1.083|0.012|0.016|0.017|0.010|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|1|0|NA|NA|NA|NA|NA|1|0.073|0.411|0.408|0.017|0|0|0|0|0|0|0|0|14|0|NA|NA|NA|NA|NA|14|0.786|0.477|0.476|0.187|0|0|0|0|0|0|0|0|4.840|0.000|NA|NA|NA|NA|NA|4.840|0.250|0.440|0.437|0.032|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|2.577|0.000|NA|NA|NA|NA|NA|2.577|0.154|0.019|0.019|0.033|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|F|15|Grade1|2/15-2/15||0|NA|NA|NA|0|0.000|2|0.285|0.609|0.602|0.058|0|0|0|0|0|0|0|0||0|NA|NA|NA|NA|NA|1|0.000|0.184|0.172|0.062|0|0|0|0|0|0|0|0||0|NA|NA|NA|NA|NA|3|0.190|0.425|0.418|0.027|0|0|0|0|0|0|0|0|666335|5113|55|-|-||55-666335-5113|4/24/2025 1:56:23 AM|8
0.00|1|2|25|638810565835457504|SP101|15|666335|6IN_SLIP|1|0|NA|NA|NA|0|0.000|1|0.064|0.589|0.584|0.048|0|0|0|0|0|0|0|0|12|0|NA|NA|NA|0|1.732|12|1.176|0.660|0.645|0.278|0|0|0|0|0|0|0|0|4.440|0.000|NA|NA|NA|0.000|0.093|4.320|0.357|0.622|0.615|0.070|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|2.238|0.000|NA|NA|NA|0.000|0.361|2.249|0.243|0.016|0.016|0.044|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0|0|NA|NA|NA|NA|NA|0|0.000|0.151|0.137|0.053|0|0|0|0|0|0|0|0|4|0|NA|NA|NA|NA|NA|4|0.042|0.218|0.200|0.108|0|0|0|0|0|0|0|0|1.560|0.000|NA|NA|NA|NA|NA|1.560|0.007|0.182|0.168|0.065|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|1.083|0.000|NA|NA|NA|NA|NA|1.083|0.012|0.016|0.017|0.010|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|1|0|NA|NA|NA|NA|NA|1|0.073|0.411|0.408|0.017|0|0|0|0|0|0|0|0|14|0|NA|NA|NA|NA|NA|14|0.786|0.477|0.476|0.187|0|0|0|0|0|0|0|0|4.840|0.000|NA|NA|NA|NA|NA|4.840|0.250|0.440|0.437|0.032|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|2.577|0.000|NA|NA|NA|NA|NA|2.577|0.154|0.019|0.019|0.033|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|F|16|Grade1|2/16-2/16||0|NA|NA|NA|0|0.000|6|0.845|0.604|0.604|0.057|0|0|0|0|0|0|0|0||0|NA|NA|NA|NA|NA|3|0.026|0.178|0.170|0.063|0|0|0|0|0|0|0|0||0|NA|NA|NA|NA|NA|6|0.547|0.426|0.423|0.024|0|0|0|0|0|0|0|0|666335|5113|55|-|-||55-666335-5113|4/24/2025 1:56:23 AM|8
0.00|1|2|25|638810565835457504|SP101|16|666335|6IN_SLIP|1|0|NA|NA|NA|0|0.000|1|0.064|0.589|0.584|0.048|0|0|0|0|0|0|0|0|12|0|NA|NA|NA|0|1.732|12|1.176|0.660|0.645|0.278|0|0|0|0|0|0|0|0|4.440|0.000|NA|NA|NA|0.000|0.093|4.320|0.357|0.622|0.615|0.070|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|2.238|0.000|NA|NA|NA|0.000|0.361|2.249|0.243|0.016|0.016|0.044|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0|0|NA|NA|NA|NA|NA|0|0.000|0.151|0.137|0.053|0|0|0|0|0|0|0|0|4|0|NA|NA|NA|NA|NA|4|0.042|0.218|0.200|0.108|0|0|0|0|0|0|0|0|1.560|0.000|NA|NA|NA|NA|NA|1.560|0.007|0.182|0.168|0.065|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|1.083|0.000|NA|NA|NA|NA|NA|1.083|0.012|0.016|0.017|0.010|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|1|0|NA|NA|NA|NA|NA|1|0.073|0.411|0.408|0.017|0|0|0|0|0|0|0|0|14|0|NA|NA|NA|NA|NA|14|0.786|0.477|0.476|0.187|0|0|0|0|0|0|0|0|4.840|0.000|NA|NA|NA|NA|NA|4.840|0.250|0.440|0.437|0.032|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|2.577|0.000|NA|NA|NA|NA|NA|2.577|0.154|0.019|0.019|0.033|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|F|17|Grade1|2/17-2/17||0|NA|NA|NA|0|0.000|3|0.148|0.625|0.623|0.053|0|0|0|0|0|0|0|0||0|NA|NA|NA|NA|NA|1|0.000|0.193|0.188|0.060|0|0|0|0|0|0|0|0||0|NA|NA|NA|NA|NA|3|0.111|0.432|0.430|0.022|0|0|0|0|0|0|0|0|666335|5113|55|-|-||55-666335-5113|4/24/2025 1:56:23 AM|8
0.00|1|2|25|638810565835457504|SP101|17|666335|6IN_SLIP|1|0|NA|NA|NA|0|0.000|1|0.064|0.589|0.584|0.048|0|0|0|0|0|0|0|0|12|0|NA|NA|NA|0|1.732|12|1.176|0.660|0.645|0.278|0|0|0|0|0|0|0|0|4.440|0.000|NA|NA|NA|0.000|0.093|4.320|0.357|0.622|0.615|0.070|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|2.238|0.000|NA|NA|NA|0.000|0.361|2.249|0.243|0.016|0.016|0.044|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0|0|NA|NA|NA|NA|NA|0|0.000|0.151|0.137|0.053|0|0|0|0|0|0|0|0|4|0|NA|NA|NA|NA|NA|4|0.042|0.218|0.200|0.108|0|0|0|0|0|0|0|0|1.560|0.000|NA|NA|NA|NA|NA|1.560|0.007|0.182|0.168|0.065|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|1.083|0.000|NA|NA|NA|NA|NA|1.083|0.012|0.016|0.017|0.010|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|1|0|NA|NA|NA|NA|NA|1|0.073|0.411|0.408|0.017|0|0|0|0|0|0|0|0|14|0|NA|NA|NA|NA|NA|14|0.786|0.477|0.476|0.187|0|0|0|0|0|0|0|0|4.840|0.000|NA|NA|NA|NA|NA|4.840|0.250|0.440|0.437|0.032|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|2.577|0.000|NA|NA|NA|NA|NA|2.577|0.154|0.019|0.019|0.033|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|F|18|Grade1|2/18-2/18||0|NA|NA|NA|0|0.000|5|0.467|0.638|0.635|0.048|0|0|0|0|0|0|0|0||0|NA|NA|NA|NA|NA|3|0.000|0.199|0.191|0.053|0|0|0|0|0|0|0|0||0|NA|NA|NA|NA|NA|5|0.308|0.439|0.436|0.021|0|0|0|0|0|0|0|0|666335|5113|55|-|-||55-666335-5113|4/24/2025 1:56:23 AM|8
0.00|1|2|25|638810565835457504|SP101|18|666335|6IN_SLIP|1|0|NA|NA|NA|0|0.000|1|0.064|0.589|0.584|0.048|0|0|0|0|0|0|0|0|12|0|NA|NA|NA|0|1.732|12|1.176|0.660|0.645|0.278|0|0|0|0|0|0|0|0|4.440|0.000|NA|NA|NA|0.000|0.093|4.320|0.357|0.622|0.615|0.070|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|2.238|0.000|NA|NA|NA|0.000|0.361|2.249|0.243|0.016|0.016|0.044|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0|0|NA|NA|NA|NA|NA|0|0.000|0.151|0.137|0.053|0|0|0|0|0|0|0|0|4|0|NA|NA|NA|NA|NA|4|0.042|0.218|0.200|0.108|0|0|0|0|0|0|0|0|1.560|0.000|NA|NA|NA|NA|NA|1.560|0.007|0.182|0.168|0.065|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|1.083|0.000|NA|NA|NA|NA|NA|1.083|0.012|0.016|0.017|0.010|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|1|0|NA|NA|NA|NA|NA|1|0.073|0.411|0.408|0.017|0|0|0|0|0|0|0|0|14|0|NA|NA|NA|NA|NA|14|0.786|0.477|0.476|0.187|0|0|0|0|0|0|0|0|4.840|0.000|NA|NA|NA|NA|NA|4.840|0.250|0.440|0.437|0.032|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|2.577|0.000|NA|NA|NA|NA|NA|2.577|0.154|0.019|0.019|0.033|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|F|19|Grade1|2/19-2/19||0|NA|NA|NA|0|0.000|6|0.282|0.624|0.622|0.050|0|0|0|0|0|0|0|0||0|NA|NA|NA|NA|NA|1|0.000|0.201|0.193|0.058|0|0|0|0|0|0|0|0||0|NA|NA|NA|NA|NA|6|0.247|0.423|0.416|0.027|0|0|0|0|0|0|0|0|666335|5113|55|-|-||55-666335-5113|4/24/2025 1:56:23 AM|8
0.00|1|2|25|638810565835457504|SP101|19|666335|6IN_SLIP|1|0|NA|NA|NA|0|0.000|1|0.064|0.589|0.584|0.048|0|0|0|0|0|0|0|0|12|0|NA|NA|NA|0|1.732|12|1.176|0.660|0.645|0.278|0|0|0|0|0|0|0|0|4.440|0.000|NA|NA|NA|0.000|0.093|4.320|0.357|0.622|0.615|0.070|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|2.238|0.000|NA|NA|NA|0.000|0.361|2.249|0.243|0.016|0.016|0.044|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0|0|NA|NA|NA|NA|NA|0|0.000|0.151|0.137|0.053|0|0|0|0|0|0|0|0|4|0|NA|NA|NA|NA|NA|4|0.042|0.218|0.200|0.108|0|0|0|0|0|0|0|0|1.560|0.000|NA|NA|NA|NA|NA|1.560|0.007|0.182|0.168|0.065|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|1.083|0.000|NA|NA|NA|NA|NA|1.083|0.012|0.016|0.017|0.010|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|1|0|NA|NA|NA|NA|NA|1|0.073|0.411|0.408|0.017|0|0|0|0|0|0|0|0|14|0|NA|NA|NA|NA|NA|14|0.786|0.477|0.476|0.187|0|0|0|0|0|0|0|0|4.840|0.000|NA|NA|NA|NA|NA|4.840|0.250|0.440|0.437|0.032|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|2.577|0.000|NA|NA|NA|NA|NA|2.577|0.154|0.019|0.019|0.033|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|F|20|Grade1|2/20-2/20||0|NA|NA|NA|0|0.000|12|1.176|0.619|0.617|0.054|0|0|0|0|0|0|0|0||0|NA|NA|NA|NA|NA|3|0.000|0.208|0.198|0.061|0|0|0|0|0|0|0|0||0|NA|NA|NA|NA|NA|14|0.786|0.411|0.408|0.026|0|0|0|0|0|0|0|0|666335|5113|55|-|-||55-666335-5113|4/24/2025 1:56:23 AM|8
0.00|1|2|25|638810565835457504|SP101|20|666335|6IN_SLIP|1|0|NA|NA|NA|0|0.000|1|0.064|0.589|0.584|0.048|0|0|0|0|0|0|0|0|12|0|NA|NA|NA|0|1.732|12|1.176|0.660|0.645|0.278|0|0|0|0|0|0|0|0|4.440|0.000|NA|NA|NA|0.000|0.093|4.320|0.357|0.622|0.615|0.070|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|2.238|0.000|NA|NA|NA|0.000|0.361|2.249|0.243|0.016|0.016|0.044|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0|0|NA|NA|NA|NA|NA|0|0.000|0.151|0.137|0.053|0|0|0|0|0|0|0|0|4|0|NA|NA|NA|NA|NA|4|0.042|0.218|0.200|0.108|0|0|0|0|0|0|0|0|1.560|0.000|NA|NA|NA|NA|NA|1.560|0.007|0.182|0.168|0.065|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|1.083|0.000|NA|NA|NA|NA|NA|1.083|0.012|0.016|0.017|0.010|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|1|0|NA|NA|NA|NA|NA|1|0.073|0.411|0.408|0.017|0|0|0|0|0|0|0|0|14|0|NA|NA|NA|NA|NA|14|0.786|0.477|0.476|0.187|0|0|0|0|0|0|0|0|4.840|0.000|NA|NA|NA|NA|NA|4.840|0.250|0.440|0.437|0.032|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|2.577|0.000|NA|NA|NA|NA|NA|2.577|0.154|0.019|0.019|0.033|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|F|21|Grade1|2/21-2/21||0|NA|NA|NA|0|0.000|3|0.170|0.589|0.584|0.064|0|0|0|0|0|0|0|0||0|NA|NA|NA|NA|NA|1|0.000|0.173|0.165|0.067|0|0|0|0|0|0|0|0||0|NA|NA|NA|NA|NA|3|0.135|0.416|0.416|0.023|0|0|0|0|0|0|0|0|666335|5113|55|-|-||55-666335-5113|4/24/2025 1:56:23 AM|8
0.00|1|2|25|638810565835457504|SP101|21|666335|6IN_SLIP|1|0|NA|NA|NA|0|0.000|1|0.064|0.589|0.584|0.048|0|0|0|0|0|0|0|0|12|0|NA|NA|NA|0|1.732|12|1.176|0.660|0.645|0.278|0|0|0|0|0|0|0|0|4.440|0.000|NA|NA|NA|0.000|0.093|4.320|0.357|0.622|0.615|0.070|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|2.238|0.000|NA|NA|NA|0.000|0.361|2.249|0.243|0.016|0.016|0.044|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0|0|NA|NA|NA|NA|NA|0|0.000|0.151|0.137|0.053|0|0|0|0|0|0|0|0|4|0|NA|NA|NA|NA|NA|4|0.042|0.218|0.200|0.108|0|0|0|0|0|0|0|0|1.560|0.000|NA|NA|NA|NA|NA|1.560|0.007|0.182|0.168|0.065|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|1.083|0.000|NA|NA|NA|NA|NA|1.083|0.012|0.016|0.017|0.010|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|1|0|NA|NA|NA|NA|NA|1|0.073|0.411|0.408|0.017|0|0|0|0|0|0|0|0|14|0|NA|NA|NA|NA|NA|14|0.786|0.477|0.476|0.187|0|0|0|0|0|0|0|0|4.840|0.000|NA|NA|NA|NA|NA|4.840|0.250|0.440|0.437|0.032|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|2.577|0.000|NA|NA|NA|NA|NA|2.577|0.154|0.019|0.019|0.033|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|F|22|Grade1|2/22-2/22||0|NA|NA|NA|0|0.000|4|0.407|0.602|0.596|0.058|0|0|0|0|0|0|0|0||0|NA|NA|NA|NA|NA|1|0.000|0.181|0.167|0.066|0|0|0|0|0|0|0|0||0|NA|NA|NA|NA|NA|4|0.269|0.422|0.418|0.027|0|0|0|0|0|0|0|0|666335|5113|55|-|-||55-666335-5113|4/24/2025 1:56:23 AM|8
0.00|1|2|25|638810565835457504|SP101|22|666335|6IN_SLIP|1|0|NA|NA|NA|0|0.000|1|0.064|0.589|0.584|0.048|0|0|0|0|0|0|0|0|12|0|NA|NA|NA|0|1.732|12|1.176|0.660|0.645|0.278|0|0|0|0|0|0|0|0|4.440|0.000|NA|NA|NA|0.000|0.093|4.320|0.357|0.622|0.615|0.070|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|2.238|0.000|NA|NA|NA|0.000|0.361|2.249|0.243|0.016|0.016|0.044|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0|0|NA|NA|NA|NA|NA|0|0.000|0.151|0.137|0.053|0|0|0|0|0|0|0|0|4|0|NA|NA|NA|NA|NA|4|0.042|0.218|0.200|0.108|0|0|0|0|0|0|0|0|1.560|0.000|NA|NA|NA|NA|NA|1.560|0.007|0.182|0.168|0.065|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|1.083|0.000|NA|NA|NA|NA|NA|1.083|0.012|0.016|0.017|0.010|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|1|0|NA|NA|NA|NA|NA|1|0.073|0.411|0.408|0.017|0|0|0|0|0|0|0|0|14|0|NA|NA|NA|NA|NA|14|0.786|0.477|0.476|0.187|0|0|0|0|0|0|0|0|4.840|0.000|NA|NA|NA|NA|NA|4.840|0.250|0.440|0.437|0.032|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|2.577|0.000|NA|NA|NA|NA|NA|2.577|0.154|0.019|0.019|0.033|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|F|23|Grade1|2/23-2/23||0|NA|NA|NA|0|0.000|4|0.516|0.609|0.603|0.063|0|0|0|0|0|0|0|0||0|NA|NA|NA|NA|NA|1|0.000|0.194|0.181|0.058|0|0|0|0|0|0|0|0||0|NA|NA|NA|NA|NA|4|0.319|0.415|0.413|0.024|0|0|0|0|0|0|0|0|666335|5113|55|-|-||55-666335-5113|4/24/2025 1:56:23 AM|8
0.00|1|2|25|638810565835457504|SP101|23|666335|6IN_SLIP|1|0|NA|NA|NA|0|0.000|1|0.064|0.589|0.584|0.048|0|0|0|0|0|0|0|0|12|0|NA|NA|NA|0|1.732|12|1.176|0.660|0.645|0.278|0|0|0|0|0|0|0|0|4.440|0.000|NA|NA|NA|0.000|0.093|4.320|0.357|0.622|0.615|0.070|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|2.238|0.000|NA|NA|NA|0.000|0.361|2.249|0.243|0.016|0.016|0.044|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0|0|NA|NA|NA|NA|NA|0|0.000|0.151|0.137|0.053|0|0|0|0|0|0|0|0|4|0|NA|NA|NA|NA|NA|4|0.042|0.218|0.200|0.108|0|0|0|0|0|0|0|0|1.560|0.000|NA|NA|NA|NA|NA|1.560|0.007|0.182|0.168|0.065|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|1.083|0.000|NA|NA|NA|NA|NA|1.083|0.012|0.016|0.017|0.010|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|1|0|NA|NA|NA|NA|NA|1|0.073|0.411|0.408|0.017|0|0|0|0|0|0|0|0|14|0|NA|NA|NA|NA|NA|14|0.786|0.477|0.476|0.187|0|0|0|0|0|0|0|0|4.840|0.000|NA|NA|NA|NA|NA|4.840|0.250|0.440|0.437|0.032|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|2.577|0.000|NA|NA|NA|NA|NA|2.577|0.154|0.019|0.019|0.033|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|F|24|Grade1|2/24-2/24||0|NA|NA|NA|0|1.732|4|0.180|0.614|0.606|0.067|0|0|0|0|0|0|0|0||0|NA|NA|NA|NA|NA|2|0.000|0.196|0.179|0.060|0|0|0|0|0|0|0|0||0|NA|NA|NA|NA|NA|6|0.178|0.418|0.415|0.023|0|0|0|0|0|0|0|0|666335|5113|55|-|-||55-666335-5113|4/24/2025 1:56:23 AM|8
0.00|1|2|25|638810565835457504|SP101|24|666335|6IN_SLIP|1|0|NA|NA|NA|0|0.000|1|0.064|0.589|0.584|0.048|0|0|0|0|0|0|0|0|12|0|NA|NA|NA|0|1.732|12|1.176|0.660|0.645|0.278|0|0|0|0|0|0|0|0|4.440|0.000|NA|NA|NA|0.000|0.093|4.320|0.357|0.622|0.615|0.070|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|2.238|0.000|NA|NA|NA|0.000|0.361|2.249|0.243|0.016|0.016|0.044|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0|0|NA|NA|NA|NA|NA|0|0.000|0.151|0.137|0.053|0|0|0|0|0|0|0|0|4|0|NA|NA|NA|NA|NA|4|0.042|0.218|0.200|0.108|0|0|0|0|0|0|0|0|1.560|0.000|NA|NA|NA|NA|NA|1.560|0.007|0.182|0.168|0.065|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|1.083|0.000|NA|NA|NA|NA|NA|1.083|0.012|0.016|0.017|0.010|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|1|0|NA|NA|NA|NA|NA|1|0.073|0.411|0.408|0.017|0|0|0|0|0|0|0|0|14|0|NA|NA|NA|NA|NA|14|0.786|0.477|0.476|0.187|0|0|0|0|0|0|0|0|4.840|0.000|NA|NA|NA|NA|NA|4.840|0.250|0.440|0.437|0.032|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|2.577|0.000|NA|NA|NA|NA|NA|2.577|0.154|0.019|0.019|0.033|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|F|25|Grade1|2/25-2/25||0|NA|NA|NA|0|0.000|4|0.152|0.633|0.622|0.278|0|0|0|0|0|0|0|0||0|NA|NA|NA|NA|NA|1|0.042|0.218|0.200|0.108|0|0|0|0|0|0|0|0||0|NA|NA|NA|NA|NA|4|0.128|0.415|0.414|0.187|0|0|0|0|0|0|0|0|666335|5113|55|-|-||55-666335-5113|4/24/2025 1:56:23 AM|8
NUM_DATA_ROWS|000000025
NUM_DATA_COLUMNS|000000322
DELIMITER|;
START_TIME_FORMAT|MM/dd/yyyy HH:mm:ss
START_TIME|04/24/2025 01:56:23
LOGISTICS_COLUMN|A_LOGISTICS
LOGISTICS_COLUMN|B_LOGISTICS
LOGISTICS_1|A_BASIC_TYPE=;A_INFO=6IN_SLIP_20250424_0127_2025-04-24_01;56;37;581.txt.csv;A_INFO2=25;A_JOBID=SP101;A_MES_ENTITY=SP101;A_MID=55-666335-5113;A_NULL_DATA=;A_PPID=NO_PPID;A_PROCESS_JOBID=;A_PRODUCT=;A_SEQUENCE=638810565835457504;A_WAFER_ID=;A_WAFER_POS=;
LOGISTICS_2|B_BASIC_TYPE=Left - High Thruput;B_INFO=-;B_INFO2=;B_JOBID=;B_MES_ENTITY=;B_MID=666335;B_NULL_DATA=;B_PPID=6IN_SLIP;B_PROCESS_JOBID=55;B_PRODUCT=5113;B_SEQUENCE=638810565835457504;B_WAFER_ID=-;B_WAFER_POS=-;
END_HEADER

View File

@ -0,0 +1,49 @@
1 1 1 0 0.10 0.21 0.019 0.10 4/24/2025 4:46:29 PM 1.15 1.18 1.12 0.0291 100 100 100 0 667227 0.013 0.019 0.006 0.006 2 3 0.006 1 667227 36 6IN_THIN ROTR 0.3 1 0 0.59 0.34 1.02 0 0.59 3 4 2 1 TENCOR1
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 |
|---|---|---|---|-----|------|-------|-----|----------------------|------|------|------|--------|-----|-----|-----|----|--------|-------|-------|-------|-------|----|----|-------|----|----|--------|----|---------------|-----|----|----|------|------|------|----|------|----|----|----|----|---------|
| 1 | 1 | 1 | 0 | 0.1 | 0.21 | 0.019 | 0.1 | 4/24/2025 4:46:29 PM | 1.15 | 1.18 | 1.12 | 0.0291 | 100 | 100 | 100 | 0 | 667227 | 0.013 | 0.019 | 0.006 | 0.006 | 2 | 3 | 0.006 | 1 | | 667227 | 36 | 6IN_THIN ROTR | 0.3 | 1 | 0 | 0.59 | 0.34 | 1.02 | 0 | 0.59 | 3 | 4 | 2 | 1 | TENCOR1 |
<1>:1
<2>:1
<3>:1
<4>:0
<5>:0.1
<6>:0.21
<7>:0.019
<8>:0.1
<9>:4/24/2025 4:46:29 PM
<10>:1.15
<11>:1.18
<12>:1.12
<13>:0.0291
<14>:100
<15>:100
<16>:100
<17>:0
<18>:667227
<19>:0.013
<20>:0.019
<21>:0.006
<22>:0.006
<23>:2
<24>:3
<25>:0.006
<26>:1
<27>:
<28>:667227
<29>:36
<30>:6IN_THIN ROTR
<31>:0.3
<32>:1
<33>:0
<34>:0.59
<35>:0.34
<36>:1.02
<37>:0
<38>:0.59
<39>:3
<40>:4
<41>:2
<42>:1
<43>:TENCOR1

View File

@ -0,0 +1,176 @@
{
"Id": -1,
"AreaCountAvg": "1",
"AreaCountMax": "1",
"AreaCountMin": "1",
"AreaCountStdDev": "0",
"AreaTotalAvg": "0.10",
"AreaTotalMax": "0.21",
"AreaTotalMin": "0.019",
"AreaTotalStdDev": "0.10",
"Date": "4/24/2025 4:46:29 PM",
"HazeAverageAvg": "1.15",
"HazeAverageMax": "1.18",
"HazeAverageMin": "1.12",
"HazeAverageStdDev": "0.0291",
"HazeRegionAvg": "100",
"HazeRegionMax": "100",
"HazeRegionMin": "100",
"HazeRegionStdDev": "0",
"Layer": null,
"LotID": "667227",
"LPDCM2Avg": "0.013",
"LPDCM2Max": "0.019",
"LPDCM2Min": "0.006",
"LPDCM2StdDev": "0.006",
"LPDCountAvg": "2",
"LPDCountMax": "3",
"LPDCountMin": "1",
"LPDCountStdDev": "1",
"Operator": "",
"ParseErrorText": "ParseErrorText",
"PSN": "5142",
"RDS": "667227",
"Reactor": "36",
"Recipe": "6IN_THIN ROTR",
"ScratchCountAvg": "0.3",
"ScratchCountMax": "1",
"ScratchCountMin": "0",
"ScratchCountStdDev": "0.6",
"ScratchTotalAvg": "0.34",
"ScratchTotalMax": "1.02",
"ScratchTotalMin": "0",
"ScratchTotalStdDev": "0.59",
"SumOfDefectsAvg": "3",
"SumOfDefectsMax": "4",
"SumOfDefectsMin": "2",
"SumOfDefectsStdDev": "1",
"Title": null,
"UniqueId": "TENCOR1_1T667227_202504241646295374",
"Zone": null,
"CellName": "TENCOR1",
"Data": "*Data*",
"i": -1,
"Details": [
{
"Id": 0,
"AreaCount": "1",
"AreaTotal": "0.0716mm2",
"Bin1": "2",
"Bin2": "1",
"Bin3": "0",
"Bin4": "0",
"Bin5": "0",
"Bin6": "0",
"Bin7": null,
"Bin8": null,
"Comments": "- High Thruput",
"Date": "4/24/2025 4:46:29 PM",
"Diameter": "150 mm",
"Exclusion": "4mm",
"Gain": "4",
"HazeAverage": "1.16ppm",
"HazePeak": "25.5ppm",
"HazeRegion": "100%",
"HazeRng": "500ppm",
"HeaderUniqueId": "TENCOR1_1T667227_202504241646295374",
"LPDCM2": "0.019",
"LPDCount": "3",
"Laser": "488nm",
"Mean": "0.252",
"Recipe": "6IN_THIN ROTR",
"ScratchCount": "1",
"ScratchTotal": "1.02mm",
"Slot": "01",
"Sort": "PASS",
"StdDev": "0.043",
"SumOfDefects": "4",
"Thresh": "0.200um",
"Thruput": "Normal",
"Title": null,
"UniqueId": "TENCOR1_1T667227_202504241646295374_Item-1",
"Data": "*Data*",
"i": -1
},
{
"Id": 0,
"AreaCount": "1",
"AreaTotal": "0.0195mm2",
"Bin1": "1",
"Bin2": "0",
"Bin3": "0",
"Bin4": "0",
"Bin5": "1",
"Bin6": "0",
"Bin7": null,
"Bin8": null,
"Comments": "- High Thruput",
"Date": "4/24/2025 4:46:29 PM",
"Diameter": "150 mm",
"Exclusion": "4mm",
"Gain": "4",
"HazeAverage": "1.18ppm",
"HazePeak": "25.0ppm",
"HazeRegion": "100%",
"HazeRng": "500ppm",
"HeaderUniqueId": "TENCOR1_1T667227_202504241646295374",
"LPDCM2": "0.013",
"LPDCount": "2",
"Laser": "488nm",
"Mean": "1.32",
"Recipe": "6IN_THIN ROTR",
"ScratchCount": "0",
"ScratchTotal": "0mm",
"Slot": "15",
"Sort": "PASS",
"StdDev": "1.54",
"SumOfDefects": "3",
"Thresh": "0.200um",
"Thruput": "Normal",
"Title": null,
"UniqueId": "TENCOR1_1T667227_202504241646295374_Item-2",
"Data": "*Data*",
"i": -1
},
{
"Id": 0,
"AreaCount": "1",
"AreaTotal": "0.213mm2",
"Bin1": "0",
"Bin2": "1",
"Bin3": "0",
"Bin4": "0",
"Bin5": "0",
"Bin6": "0",
"Bin7": null,
"Bin8": null,
"Comments": "- High Thruput",
"Date": "4/24/2025 4:46:29 PM",
"Diameter": "150 mm",
"Exclusion": "4mm",
"Gain": "4",
"HazeAverage": "1.12ppm",
"HazePeak": "22.5ppm",
"HazeRegion": "100%",
"HazeRng": "500ppm",
"HeaderUniqueId": "TENCOR1_1T667227_202504241646295374",
"LPDCM2": "0.006",
"LPDCount": "1",
"Laser": "488nm",
"Mean": "0.307",
"Recipe": "6IN_THIN ROTR",
"ScratchCount": "0",
"ScratchTotal": "0mm",
"Slot": "25",
"Sort": "PASS",
"StdDev": "0.000",
"SumOfDefects": "2",
"Thresh": "0.200um",
"Thruput": "Normal",
"Title": null,
"UniqueId": "TENCOR1_1T667227_202504241646295374_Item-3",
"Data": "*Data*",
"i": -1
}
]
}

View File

@ -0,0 +1,43 @@
HEADER_TAG HEADER_VALUE
FORMAT 2.00
NUMBER_PASSES 0001
HEADER_OFFSET H#######T
DATA_OFFSET D#######T
END_OFFSET E#######T
"Time" "A_LOGISTICS" "B_LOGISTICS" "Test" "Count" "Index" "MesEntity" "Date" "Employee" "Lot" "PSN" "Reactor" "Recipe" "Comments" "Diameter" "Exclusion" "Gain" "HeaderUniqueId" "Laser" "ParseErrorText" "RDS" "Slot" "UniqueId" "AreaCount" "AreaCountAvg" "AreaCountMax" "AreaCountMin" "AreaCountStdDev" "AreaTotal" "AreaTotalAvg" "AreaTotalMax" "AreaTotalMin" "AreaTotalStdDev" "Bin1" "Bin2" "Bin3" "Bin4" "Bin5" "Bin6" "Bin7" "Bin8" "HazeAverage" "HazeAverageAvg" "HazeAverageMax" "HazeAverageMin" "HazeAverageStdDev" "HazePeak" "HazeRegion" "HazeRegionAvg" "HazeRegionMax" "HazeRegionMin" "HazeRegionStdDev" "HazeRng" "LPDCM2" "LPDCM2Avg" "LPDCM2Max" "LPDCM2Min" "LPDCM2StdDev" "LPDCount" "LPDCountAvg" "LPDCountMax" "LPDCountMin" "LPDCountStdDev" "Mean" "ScratchCount" "ScratchCountAvg" "ScratchCountMax" "ScratchCountMin" "ScratchCountStdDev" "ScratchTotal" "ScratchTotalAvg" "ScratchTotalMax" "ScratchTotalMin" "ScratchTotalStdDev" "Sort" "StdDev" "SumOfDefects" "SumOfDefectsAvg" "SumOfDefectsMax" "SumOfDefectsMin" "SumOfDefectsStdDev" "Thresh" "Thruput"
0.00 1 2 7 3 0 TENCOR1 4/24/2025 4:46:29 PM 667227 5142 36 6IN_THIN ROTR - High Thruput 150 mm 4mm 4 HeaderUniqueId 488nm ParseErrorText 667227 01 UniqueId 1 1 1 1 0 0.0716mm2 0.10 0.21 0.019 0.10 2 1 0 0 0 0 1.16ppm 1.15 1.18 1.12 0.0291 25.5ppm 100% 100 100 100 0 500ppm 0.019 0.013 0.019 0.006 0.006 3 2 3 1 1 0.252 1 0.3 1 0 0.6 1.02mm 0.34 1.02 0 0.59 PASS 0.043 4 3 4 2 1 0.200um Normal
0.00 1 2 7 3 1 TENCOR1 4/24/2025 4:46:29 PM 667227 5142 36 6IN_THIN ROTR - High Thruput 150 mm 4mm 4 HeaderUniqueId 488nm ParseErrorText 667227 15 UniqueId 1 1 1 1 0 0.0195mm2 0.10 0.21 0.019 0.10 1 0 0 0 1 0 1.18ppm 1.15 1.18 1.12 0.0291 25.0ppm 100% 100 100 100 0 500ppm 0.013 0.013 0.019 0.006 0.006 2 2 3 1 1 1.32 0 0.3 1 0 0.6 0mm 0.34 1.02 0 0.59 PASS 1.54 3 3 4 2 1 0.200um Normal
0.00 1 2 7 3 2 TENCOR1 4/24/2025 4:46:29 PM 667227 5142 36 6IN_THIN ROTR - High Thruput 150 mm 4mm 4 HeaderUniqueId 488nm ParseErrorText 667227 25 UniqueId 1 1 1 1 0 0.213mm2 0.10 0.21 0.019 0.10 0 1 0 0 0 0 1.12ppm 1.15 1.18 1.12 0.0291 22.5ppm 100% 100 100 100 0 500ppm 0.006 0.013 0.019 0.006 0.006 1 2 3 1 1 0.307 0 0.3 1 0 0.6 0mm 0.34 1.02 0 0.59 PASS 0.000 2 3 4 2 1 0.200um Normal
NUM_DATA_ROWS 000000003
NUM_DATA_COLUMNS 000000083
DELIMITER ;
START_TIME_FORMAT MM/dd/yyyy HH:mm:ss
START_TIME 04/24/2025 16:46:29
LOGISTICS_COLUMN A_LOGISTICS
LOGISTICS_COLUMN B_LOGISTICS
LOGISTICS_1 A_HeaderId=524300;A_SubgroupId=1745538421;A_BASIC_TYPE=;A_INFO=202504241646295374.pcl.csv;A_INFO2=3;A_JOBID=TENCOR1;A_MES_ENTITY=TENCOR1;A_MID=1T667227;A_NULL_DATA=;A_PPID=NO_PPID;A_PROCESS_JOBID=;A_PRODUCT=;A_SEQUENCE=638811099895374259;A_WAFER_ID=;A_WAFER_POS=;
LOGISTICS_2 B_HeaderId=524300;B_SubgroupId=1745538421;B_BASIC_TYPE=- High Thruput;B_INFO=-;B_INFO2=;B_JOBID=;B_MES_ENTITY=;B_MID=667227;B_NULL_DATA=;B_PPID=6IN_THIN ROTR;B_PROCESS_JOBID=36;B_PRODUCT=5142;B_SEQUENCE=638811099895374259;B_WAFER_ID=-;B_WAFER_POS=-;
EOF
HEADER_TAG|HEADER_VALUE
FORMAT|2.00
NUMBER_PASSES|0001
HEADER_OFFSET|000002772
DATA_OFFSET|000000128
END_OFFSET|000003437
|Time|A_LOGISTICS|B_LOGISTICS|Count|Sequence|MesEntity|Index|Date|Recipe|Id|WaferId|LPDCount|LPDCM2|AreaCount|AreaTotal|ScratchCount|ScratchTotal|SumOfDefects|HazeRegion|HazeAverage|Grade|LPDCountMin|LPDCM2Min|AreaCountMin|AreaTotalMin|ScratchCountMin|ScratchTotalMin|SumOfDefectsMin|HazeRegionMin|HazeAverageMin|LPDCountMax|LPDCM2Max|AreaCountMax|AreaTotalMax|ScratchCountMax|ScratchTotalMax|SumOfDefectsMax|HazeRegionMax|HazeAverageMax|LPDCountAvg|LPDCM2Avg|AreaCountAvg|AreaTotalAvg|ScratchCountAvg|ScratchTotalAvg|SumOfDefectsAvg|HazeRegionAvg|HazeAverageAvg|LPDCountStdDev|LPDCM2StdDev|AreaCountStdDev|AreaTotalStdDev|ScratchCountStdDev|ScratchTotalStdDev|SumOfDefectsStdDev|HazeRegionStdDev|HazeAverageStdDev|WaferDate|Comments|Sort|WaferLPDCount|WaferLPDCM2|Bin1|Bin2|Bin3|Bin4|Bin5|Bin6|Bin7|Bin8|Mean|StdDev|WaferAreaCount|WaferAreaTotal|WaferScratchCount|WaferScratchTotal|WaferSumOfDefects|WaferHazeRegion|WaferHazeAverage|HazePeak|Laser|Gain|Diameter|Thresh|Exclusion|HazeRng|Thruput|WaferRecipe|RDS|PSN|Reactor|Layer|Zone|Employee|InferredLot|EventId|
|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|
0.00|1|2|3|638811099895374259|TENCOR1|0|4/24/2025 4:46:29 PM|6IN_THIN ROTR|667227|01|3|0.019|1|0.072|1|1.02|4|100|1.16|P|1|0.006|1|0.019|0|0|2|100|1.12|3|0.019|1|0.21|1|1.02|4|100|1.18|2|0.013|1|0.10|0.3|0.34|3|100|1.15|1|0.006|0|0.10|0.6|0.59|1|0|0.0291|Wed, Apr 23, 2025 08:34:51 AM|- High Thruput|PASS|3|0.019|2|1|0|0|0|0|||0.252|0.043|1|0.0716mm2|1|1.02mm|4|100%|1.16ppm|25.5ppm|488nm|4|150 mm|0.200um|4mm|500ppm|Normal|6IN_THIN ROTR|667227|5142|36|-|-||667227|7
0.00|1|2|3|638811099895374259|TENCOR1|1|4/24/2025 4:46:29 PM|6IN_THIN ROTR|667227|15|2|0.013|1|0.019|0|0|3|100|1.18|P|1|0.006|1|0.019|0|0|2|100|1.12|3|0.019|1|0.21|1|1.02|4|100|1.18|2|0.013|1|0.10|0.3|0.34|3|100|1.15|1|0.006|0|0.10|0.6|0.59|1|0|0.0291|Wed, Apr 23, 2025 08:35:39 AM|- High Thruput|PASS|2|0.013|1|0|0|0|1|0|||1.32|1.54|1|0.0195mm2|0|0mm|3|100%|1.18ppm|25.0ppm|488nm|4|150 mm|0.200um|4mm|500ppm|Normal|6IN_THIN ROTR|667227|5142|36|-|-||667227|7
0.00|1|2|3|638811099895374259|TENCOR1|2|4/24/2025 4:46:29 PM|6IN_THIN ROTR|667227|25|1|0.006|1|0.21|0|0|2|100|1.12|P|1|0.006|1|0.019|0|0|2|100|1.12|3|0.019|1|0.21|1|1.02|4|100|1.18|2|0.013|1|0.10|0.3|0.34|3|100|1.15|1|0.006|0|0.10|0.6|0.59|1|0|0.0291|Wed, Apr 23, 2025 08:36:22 AM|- High Thruput|PASS|1|0.006|0|1|0|0|0|0|||0.307|0.000|1|0.213mm2|0|0mm|2|100%|1.12ppm|22.5ppm|488nm|4|150 mm|0.200um|4mm|500ppm|Normal|6IN_THIN ROTR|667227|5142|36|-|-||667227|7
NUM_DATA_ROWS|000000003
NUM_DATA_COLUMNS|000000096
DELIMITER|;
START_TIME_FORMAT|MM/dd/yyyy HH:mm:ss
START_TIME|04/24/2025 16:46:29
LOGISTICS_COLUMN|A_LOGISTICS
LOGISTICS_COLUMN|B_LOGISTICS
LOGISTICS_1|A_BASIC_TYPE=;A_INFO=202504241646295374.pcl.csv;A_INFO2=3;A_JOBID=TENCOR1;A_MES_ENTITY=TENCOR1;A_MID=1T667227;A_NULL_DATA=;A_PPID=NO_PPID;A_PROCESS_JOBID=;A_PRODUCT=;A_SEQUENCE=638811099895374259;A_WAFER_ID=;A_WAFER_POS=;
LOGISTICS_2|B_BASIC_TYPE=- High Thruput;B_INFO=-;B_INFO2=;B_JOBID=;B_MES_ENTITY=;B_MID=667227;B_NULL_DATA=;B_PPID=6IN_THIN ROTR;B_PROCESS_JOBID=36;B_PRODUCT=5142;B_SEQUENCE=638811099895374259;B_WAFER_ID=-;B_WAFER_POS=-;
END_HEADER

View File

@ -0,0 +1,78 @@
UniqueId 666765 4/24/2025 5:14:32 PM Lot LSL8IN \ 10PT_5mm 57 666765 4626 1 - CDE5 Operator Engineer DLRatio 18.55 AutoOptimizeGain AutoProbeHeightSet 3.00 915.190 0.0069647 SemiRadial 1 95.00 270.000 913.9620971680 1.3236315 2 71.00 270.000 923.2605590820 1.2676778 3 47.00 270.000 921.4100952148 1.3205365 4 23.00 270.000 913.6674194336 1.2704575 5 0.00 0.000 908.1397705078 1.3234487 6 11.00 90.000 908.0071411133 1.2582344 7 35.00 90.000 916.3591918945 1.5512319 8 59.00 90.000 920.1303100586 1.7320848 9 83.00 90.000 921.3920288086 1.6781629 10 95.00 90.000 905.5722656250 1.7448909
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 |
|----------|--------|----------------------|-----|-------------------|----|--------|------|---|----|------|----------|----------|---------|-------|------------------|--------------------|------|----|---------|-----------|------------|----|-------|---------|----------------|-----------|----|-------|---------|----------------|-----------|----|-------|---------|----------------|-----------|----|-------|---------|----------------|-----------|----|------|-------|----------------|-----------|----|-------|--------|----------------|-----------|----|-------|--------|----------------|-----------|----|-------|--------|----------------|-----------|----|-------|--------|----------------|-----------|----|-------|--------|----------------|-----------|
| UniqueId | 666765 | 4/24/2025 5:14:32 PM | Lot | LSL8IN \ 10PT_5mm | 57 | 666765 | 4626 | 1 | - | CDE5 | Operator | Engineer | DLRatio | 18.55 | AutoOptimizeGain | AutoProbeHeightSet | 3.00 | | 915.190 | 0.0069647 | SemiRadial | 1 | 95.00 | 270.000 | 913.9620971680 | 1.3236315 | 2 | 71.00 | 270.000 | 923.2605590820 | 1.2676778 | 3 | 47.00 | 270.000 | 921.4100952148 | 1.3205365 | 4 | 23.00 | 270.000 | 913.6674194336 | 1.2704575 | 5 | 0.00 | 0.000 | 908.1397705078 | 1.3234487 | 6 | 11.00 | 90.000 | 908.0071411133 | 1.2582344 | 7 | 35.00 | 90.000 | 916.3591918945 | 1.5512319 | 8 | 59.00 | 90.000 | 920.1303100586 | 1.7320848 | 9 | 83.00 | 90.000 | 921.3920288086 | 1.6781629 | 10 | 95.00 | 90.000 | 905.5722656250 | 1.7448909 |
<1>:UniqueId
<2>:666765
<3>:4/24/2025 5:14:32 PM
<4>:Lot
<5>:LSL8IN \ 10PT_5mm
<6>:57
<7>:666765
<8>:4626
<9>:1
<10>:-
<11>:CDE5
<12>:Operator
<13>:Engineer
<14>:DLRatio
<15>:18.55
<16>:AutoOptimizeGain
<17>:AutoProbeHeightSet
<18>:3
<19>:
<20>:915.19
<21>:0.0069647
<22>:SemiRadial
<23>:1
<24>:95
<25>:270
<26>:913.9620972
<27>:1.3236315
<28>:2
<29>:71
<30>:270
<31>:923.2605591
<32>:1.2676778
<33>:3
<34>:47
<35>:270
<36>:921.4100952
<37>:1.3205365
<38>:4
<39>:23
<40>:270
<41>:913.6674194
<42>:1.2704575
<43>:5
<44>:0
<45>:0
<46>:908.1397705
<47>:1.3234487
<48>:6
<49>:11
<50>:90
<51>:908.0071411
<52>:1.2582344
<53>:7
<54>:35
<55>:90
<56>:916.3591919
<57>:1.5512319
<58>:8
<59>:59
<60>:90
<61>:920.1303101
<62>:1.7320848
<63>:9
<64>:83
<65>:90
<66>:921.3920288
<67>:1.6781629
<68>:10
<69>:95
<70>:90
<71>:905.5722656
<72>:1.7448909

View File

@ -0,0 +1,122 @@
{
"SentToMetrology": false,
"SentToSPC": false,
"AutoOptimizeGain": "AutoOptimizeGain",
"AutoProbeHeightSet": "AutoProbeHeightSet",
"Avg": "915.190",
"CellName": "CDE5",
"DLRatio": "DLRatio",
"DataReject": "3.00",
"Date": "4/24/2025 5:14:32 PM",
"Engineer": "Engineer",
"EquipId": "CDE5",
"FileName": "",
"FilePath": "",
"Id": -1,
"Layer": "1",
"LotId": "Lot",
"Op": "Operator",
"PSN": "4626",
"RDS": "666765",
"Reactor": "57",
"Recipe": "LSL8IN \\ 10PT_5mm",
"ResistivitySpec": "ResistivitySpec",
"Run": "666765",
"SemiRadial": "SemiRadial",
"StDev": "0.0069647",
"Temp": "18.55",
"UniqueId": "CDE5_57-666765-4626.1_202504241714320000",
"Zone": "-",
"Details": [
{
"HeaderUniqueId": "CDE5_57-666765-4626.1_202504241714320000",
"Merit": "1.3236315",
"Pt": "1",
"R": "95.00",
"Rs": "913.9620971680",
"T": "270.000",
"UniqueId": "CDE5_57-666765-4626.1_202504241714320000_Item-1"
},
{
"HeaderUniqueId": "CDE5_57-666765-4626.1_202504241714320000",
"Merit": "1.2676778",
"Pt": "2",
"R": "71.00",
"Rs": "923.2605590820",
"T": "270.000",
"UniqueId": "CDE5_57-666765-4626.1_202504241714320000_Item-2"
},
{
"HeaderUniqueId": "CDE5_57-666765-4626.1_202504241714320000",
"Merit": "1.3205365",
"Pt": "3",
"R": "47.00",
"Rs": "921.4100952148",
"T": "270.000",
"UniqueId": "CDE5_57-666765-4626.1_202504241714320000_Item-3"
},
{
"HeaderUniqueId": "CDE5_57-666765-4626.1_202504241714320000",
"Merit": "1.2704575",
"Pt": "4",
"R": "23.00",
"Rs": "913.6674194336",
"T": "270.000",
"UniqueId": "CDE5_57-666765-4626.1_202504241714320000_Item-4"
},
{
"HeaderUniqueId": "CDE5_57-666765-4626.1_202504241714320000",
"Merit": "1.3234487",
"Pt": "5",
"R": "0.00",
"Rs": "908.1397705078",
"T": "0.000",
"UniqueId": "CDE5_57-666765-4626.1_202504241714320000_Item-5"
},
{
"HeaderUniqueId": "CDE5_57-666765-4626.1_202504241714320000",
"Merit": "1.2582344",
"Pt": "6",
"R": "11.00",
"Rs": "908.0071411133",
"T": "90.000",
"UniqueId": "CDE5_57-666765-4626.1_202504241714320000_Item-6"
},
{
"HeaderUniqueId": "CDE5_57-666765-4626.1_202504241714320000",
"Merit": "1.5512319",
"Pt": "7",
"R": "35.00",
"Rs": "916.3591918945",
"T": "90.000",
"UniqueId": "CDE5_57-666765-4626.1_202504241714320000_Item-7"
},
{
"HeaderUniqueId": "CDE5_57-666765-4626.1_202504241714320000",
"Merit": "1.7320848",
"Pt": "8",
"R": "59.00",
"Rs": "920.1303100586",
"T": "90.000",
"UniqueId": "CDE5_57-666765-4626.1_202504241714320000_Item-8"
},
{
"HeaderUniqueId": "CDE5_57-666765-4626.1_202504241714320000",
"Merit": "1.6781629",
"Pt": "9",
"R": "83.00",
"Rs": "921.3920288086",
"T": "90.000",
"UniqueId": "CDE5_57-666765-4626.1_202504241714320000_Item-9"
},
{
"HeaderUniqueId": "CDE5_57-666765-4626.1_202504241714320000",
"Merit": "1.7448909",
"Pt": "10",
"R": "95.00",
"Rs": "905.5722656250",
"T": "90.000",
"UniqueId": "CDE5_57-666765-4626.1_202504241714320000_Item-10"
}
]
}

View File

@ -0,0 +1,57 @@
HEADER_TAG HEADER_VALUE
FORMAT 2.00
NUMBER_PASSES 0001
HEADER_OFFSET H#######T
DATA_OFFSET D#######T
END_OFFSET E#######T
"Time" "A_LOGISTICS" "B_LOGISTICS" "Test" "Count" "Index" "MesEntity" "Date" "Employee" "Lot" "PSN" "Reactor" "Recipe" "AutoOptimizeGain" "AutoProbeHeightSet" "Avg" "DataReject" "DLRatio" "Merit" "Pt" "R" "ResistivitySpec" "Rs" "SemiRadial" "StdDev" "T" "Temp" "Engineer" "EquipId" "FileName" "HeaderUniqueId" "Id" "Layer" "RDS" "Run" "UniqueId" "Zone" "SheetRhoVariation"
0.00 1 2 24 10 0 CDE5 4/24/2025 5:14:32 PM Operator Lot 4626 57 LSL8IN \ 10PT_5mm AutoOptimizeGain AutoProbeHeightSet 915.190 3.00 DLRatio 1.3236315 1 95.00 ResistivitySpec 913.9620971680 SemiRadial 0.0069647 270.000 18.55 Engineer ResMap5 HeaderUniqueId Id 1 666765 666765 UniqueId -
0.00 1 2 24 10 1 CDE5 4/24/2025 5:14:32 PM Operator Lot 4626 57 LSL8IN \ 10PT_5mm AutoOptimizeGain AutoProbeHeightSet 915.190 3.00 DLRatio 1.2676778 2 71.00 ResistivitySpec 923.2605590820 SemiRadial 0.0069647 270.000 18.55 Engineer ResMap5 HeaderUniqueId Id 1 666765 666765 UniqueId -
0.00 1 2 24 10 2 CDE5 4/24/2025 5:14:32 PM Operator Lot 4626 57 LSL8IN \ 10PT_5mm AutoOptimizeGain AutoProbeHeightSet 915.190 3.00 DLRatio 1.3205365 3 47.00 ResistivitySpec 921.4100952148 SemiRadial 0.0069647 270.000 18.55 Engineer ResMap5 HeaderUniqueId Id 1 666765 666765 UniqueId -
0.00 1 2 24 10 3 CDE5 4/24/2025 5:14:32 PM Operator Lot 4626 57 LSL8IN \ 10PT_5mm AutoOptimizeGain AutoProbeHeightSet 915.190 3.00 DLRatio 1.2704575 4 23.00 ResistivitySpec 913.6674194336 SemiRadial 0.0069647 270.000 18.55 Engineer ResMap5 HeaderUniqueId Id 1 666765 666765 UniqueId -
0.00 1 2 24 10 4 CDE5 4/24/2025 5:14:32 PM Operator Lot 4626 57 LSL8IN \ 10PT_5mm AutoOptimizeGain AutoProbeHeightSet 915.190 3.00 DLRatio 1.3234487 5 0.00 ResistivitySpec 908.1397705078 SemiRadial 0.0069647 0.000 18.55 Engineer ResMap5 HeaderUniqueId Id 1 666765 666765 UniqueId -
0.00 1 2 24 10 5 CDE5 4/24/2025 5:14:32 PM Operator Lot 4626 57 LSL8IN \ 10PT_5mm AutoOptimizeGain AutoProbeHeightSet 915.190 3.00 DLRatio 1.2582344 6 11.00 ResistivitySpec 908.0071411133 SemiRadial 0.0069647 90.000 18.55 Engineer ResMap5 HeaderUniqueId Id 1 666765 666765 UniqueId -
0.00 1 2 24 10 6 CDE5 4/24/2025 5:14:32 PM Operator Lot 4626 57 LSL8IN \ 10PT_5mm AutoOptimizeGain AutoProbeHeightSet 915.190 3.00 DLRatio 1.5512319 7 35.00 ResistivitySpec 916.3591918945 SemiRadial 0.0069647 90.000 18.55 Engineer ResMap5 HeaderUniqueId Id 1 666765 666765 UniqueId -
0.00 1 2 24 10 7 CDE5 4/24/2025 5:14:32 PM Operator Lot 4626 57 LSL8IN \ 10PT_5mm AutoOptimizeGain AutoProbeHeightSet 915.190 3.00 DLRatio 1.7320848 8 59.00 ResistivitySpec 920.1303100586 SemiRadial 0.0069647 90.000 18.55 Engineer ResMap5 HeaderUniqueId Id 1 666765 666765 UniqueId -
0.00 1 2 24 10 8 CDE5 4/24/2025 5:14:32 PM Operator Lot 4626 57 LSL8IN \ 10PT_5mm AutoOptimizeGain AutoProbeHeightSet 915.190 3.00 DLRatio 1.6781629 9 83.00 ResistivitySpec 921.3920288086 SemiRadial 0.0069647 90.000 18.55 Engineer ResMap5 HeaderUniqueId Id 1 666765 666765 UniqueId -
0.00 1 2 24 10 9 CDE5 4/24/2025 5:14:32 PM Operator Lot 4626 57 LSL8IN \ 10PT_5mm AutoOptimizeGain AutoProbeHeightSet 915.190 3.00 DLRatio 1.7448909 10 95.00 ResistivitySpec 905.5722656250 SemiRadial 0.0069647 90.000 18.55 Engineer ResMap5 HeaderUniqueId Id 1 666765 666765 UniqueId -
NUM_DATA_ROWS 000000010
NUM_DATA_COLUMNS 000000038
DELIMITER ;
START_TIME_FORMAT MM/dd/yyyy HH:mm:ss
START_TIME 04/24/2025 17:14:32
LOGISTICS_COLUMN A_LOGISTICS
LOGISTICS_COLUMN B_LOGISTICS
LOGISTICS_1 A_HeaderId=309148;A_SubgroupId=1745540084;A_BASIC_TYPE=;A_INFO=5424R116.RsM.csv;A_INFO2=10;A_JOBID=CDE5;A_MES_ENTITY=CDE5;A_MID=57-666765-4626.1;A_NULL_DATA=;A_PPID=NO_PPID;A_PROCESS_JOBID=;A_PRODUCT=;A_SEQUENCE=638811116720000000;A_WAFER_ID=;A_WAFER_POS=;
LOGISTICS_2 B_HeaderId=309148;B_SubgroupId=1745540084;B_BASIC_TYPE=-;B_INFO=-;B_INFO2=;B_JOBID=;B_MES_ENTITY=;B_MID=666765;B_NULL_DATA=;B_PPID=10PT_5mm;B_PROCESS_JOBID=57;B_PRODUCT=4626;B_SEQUENCE=638811116720000000;B_WAFER_ID=-;B_WAFER_POS=-;
EOF
HEADER_TAG|HEADER_VALUE
FORMAT|2.00
NUMBER_PASSES|0001
HEADER_OFFSET|000007317
DATA_OFFSET|000000128
END_OFFSET|000007957
|Time|A_LOGISTICS|B_LOGISTICS|Count|Sequence|MesEntity|Index|Title|TheFileName|Project|RecipeName|LotID|WfrID|Is_TF_DataFile|Directory|Time|Date|Temp|TCRPercent|NOrP|Avg|Dev|Min|Max|Operator|Equipment|Engineer|AreaOrDiamScan|WaferShape|BNBand|TemplateFile|XSize|YSize|CalibrationFactor|MsmtMode|DataType|DataUnit|NumProbePoints|SingleOrDualProbeConfig|NumberActPrbPts|Rsens|IdrvMx|VinGain|DataRejectSigma|MeritThreshold|PrbChgNumber|PrbName|WaferSize|EdgeEx|Xll|Yll|Xur|Yur|X|Y|CutCorners|DiamThScan|DiamStart|DiamEnd|DiamStep|FlatOrNotch|FollowMajorFlat|AutoOrManualLoad|RangeOrIndividual|PauseAfterEveryRun|AutoPrint|Plot|BulkSampleThk|Unit|RangeFrom|RangeTo|CassetteSlotSelected|R|Th|Data|Rs|RsA|RsB|NumberSample|PointX|PointY|Irng|Vrng|ChiSq|MeritGOF|DataIntegrity|RDS|PSN|Reactor|Layer|Zone|Employee|InferredLot|InferredPoint|StandardDeviationPercentage|SheetRhoVariation|EventId|
|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|
0.00|1|2|10|638811116720000000|CDE5|0|666765||LSL8IN|LSL8IN \ 10PT_5mm|MyCarrierID|WaferID|0||17:14|4/24/2025 5:14:32 PM|18.55|0.300|?|915.190|6.374|905.57|923.26|Operator|ResMap5|Engineer|TC|8|10PT_5mm.TPL|125.00|125.00|1.00000|0|Rs|Ohms/sq||10|2|10|99348.000|0.0000750007|0.01287|3.00|0.10|1|MyFavoriteProbe|200.00|10.00|-55.00|-55.00|55.00|55.00|5|5|89|0.00|-50.00|50.00|2.0000|N|Y|M|I|N|Y|N|500.000000|U|25|25|NNNNNNNNNNNNNNNNNNNNNNNNNN|95.00|270.000|913.9620971680|913.9620971680|914.08798462|731.11854485|1184|-95.00|-0.00|3051|1102|1.4E+02|1.3236315|0|666765|4626|57|1|-||57-666765-4626.1|1|0.0069647||24
0.00|1|2|10|638811116720000000|CDE5|1|666765||LSL8IN|LSL8IN \ 10PT_5mm|MyCarrierID|WaferID|0||17:14|4/24/2025 5:14:32 PM|18.55|0.300|?|915.190|6.374|905.57|923.26|Operator|ResMap5|Engineer|TC|8|10PT_5mm.TPL|125.00|125.00|1.00000|0|Rs|Ohms/sq||10|2|10|99348.000|0.0000750007|0.01287|3.00|0.10|1|MyFavoriteProbe|200.00|10.00|-55.00|-55.00|55.00|55.00|5|5|89|0.00|-50.00|50.00|2.0000|N|Y|M|I|N|Y|N|500.000000|U|25|25|NNNNNNNNNNNNNNNNNNNNNNNNNN|71.00|270.000|923.2605590820|923.2605590820|923.56932267|738.79669064|1184|-71.00|-0.00|3051|1057|1.3E+02|1.2676778|0|666765|4626|57|1|-||57-666765-4626.1|2|0.0069647||24
0.00|1|2|10|638811116720000000|CDE5|2|666765||LSL8IN|LSL8IN \ 10PT_5mm|MyCarrierID|WaferID|0||17:14|4/24/2025 5:14:32 PM|18.55|0.300|?|915.190|6.374|905.57|923.26|Operator|ResMap5|Engineer|TC|8|10PT_5mm.TPL|125.00|125.00|1.00000|0|Rs|Ohms/sq||10|2|10|99348.000|0.0000750007|0.01287|3.00|0.10|1|MyFavoriteProbe|200.00|10.00|-55.00|-55.00|55.00|55.00|5|5|89|0.00|-50.00|50.00|2.0000|N|Y|M|I|N|Y|N|500.000000|U|25|25|NNNNNNNNNNNNNNNNNNNNNNNNNN|47.00|270.000|921.4100952148|921.4100952148|909.70358100|721.40113210|1184|-47.00|-0.00|3054|1046|1.2E+02|1.3205365|0|666765|4626|57|1|-||57-666765-4626.1|3|0.0069647||24
0.00|1|2|10|638811116720000000|CDE5|3|666765||LSL8IN|LSL8IN \ 10PT_5mm|MyCarrierID|WaferID|0||17:14|4/24/2025 5:14:32 PM|18.55|0.300|?|915.190|6.374|905.57|923.26|Operator|ResMap5|Engineer|TC|8|10PT_5mm.TPL|125.00|125.00|1.00000|0|Rs|Ohms/sq||10|2|10|99348.000|0.0000750007|0.01287|3.00|0.10|1|MyFavoriteProbe|200.00|10.00|-55.00|-55.00|55.00|55.00|5|5|89|0.00|-50.00|50.00|2.0000|N|Y|M|I|N|Y|N|500.000000|U|25|25|NNNNNNNNNNNNNNNNNNNNNNNNNN|23.00|270.000|913.6674194336|913.6674194336|896.28473107|707.65557259|1184|-23.00|-0.00|3055|1042|1.2E+02|1.2704575|0|666765|4626|57|1|-||57-666765-4626.1|4|0.0069647||24
0.00|1|2|10|638811116720000000|CDE5|4|666765||LSL8IN|LSL8IN \ 10PT_5mm|MyCarrierID|WaferID|0||17:14|4/24/2025 5:14:32 PM|18.55|0.300|?|915.190|6.374|905.57|923.26|Operator|ResMap5|Engineer|TC|8|10PT_5mm.TPL|125.00|125.00|1.00000|0|Rs|Ohms/sq||10|2|10|99348.000|0.0000750007|0.01287|3.00|0.10|1|MyFavoriteProbe|200.00|10.00|-55.00|-55.00|55.00|55.00|5|5|89|0.00|-50.00|50.00|2.0000|N|Y|M|I|N|Y|N|500.000000|U|25|25|NNNNNNNNNNNNNNNNNNNNNNNNNN|0.00|0.000|908.1397705078|908.1397705078|898.61367587|713.68271830|1184|0.00|0.00|3052|1033|1.0E+02|1.3234487|0|666765|4626|57|1|-||57-666765-4626.1|5|0.0069647||24
0.00|1|2|10|638811116720000000|CDE5|5|666765||LSL8IN|LSL8IN \ 10PT_5mm|MyCarrierID|WaferID|0||17:14|4/24/2025 5:14:32 PM|18.55|0.300|?|915.190|6.374|905.57|923.26|Operator|ResMap5|Engineer|TC|8|10PT_5mm.TPL|125.00|125.00|1.00000|0|Rs|Ohms/sq||10|2|10|99348.000|0.0000750007|0.01287|3.00|0.10|1|MyFavoriteProbe|200.00|10.00|-55.00|-55.00|55.00|55.00|5|5|89|0.00|-50.00|50.00|2.0000|N|Y|M|I|N|Y|N|500.000000|U|25|25|NNNNNNNNNNNNNNNNNNNNNNNNNN|11.00|90.000|908.0071411133|908.0071411133|900.37349147|716.08698414|1184|11.00|0.00|3052|1027|1.2E+02|1.2582344|0|666765|4626|57|1|-||57-666765-4626.1|6|0.0069647||24
0.00|1|2|10|638811116720000000|CDE5|6|666765||LSL8IN|LSL8IN \ 10PT_5mm|MyCarrierID|WaferID|0||17:14|4/24/2025 5:14:32 PM|18.55|0.300|?|915.190|6.374|905.57|923.26|Operator|ResMap5|Engineer|TC|8|10PT_5mm.TPL|125.00|125.00|1.00000|0|Rs|Ohms/sq||10|2|10|99348.000|0.0000750007|0.01287|3.00|0.10|1|MyFavoriteProbe|200.00|10.00|-55.00|-55.00|55.00|55.00|5|5|89|0.00|-50.00|50.00|2.0000|N|Y|M|I|N|Y|N|500.000000|U|25|25|NNNNNNNNNNNNNNNNNNNNNNNNNN|35.00|90.000|916.3591918945|916.3591918945|903.86156023|716.31006062|1184|35.00|0.00|3052|1020|8.3E+01|1.5512319|0|666765|4626|57|1|-||57-666765-4626.1|7|0.0069647||24
0.00|1|2|10|638811116720000000|CDE5|7|666765||LSL8IN|LSL8IN \ 10PT_5mm|MyCarrierID|WaferID|0||17:14|4/24/2025 5:14:32 PM|18.55|0.300|?|915.190|6.374|905.57|923.26|Operator|ResMap5|Engineer|TC|8|10PT_5mm.TPL|125.00|125.00|1.00000|0|Rs|Ohms/sq||10|2|10|99348.000|0.0000750007|0.01287|3.00|0.10|1|MyFavoriteProbe|200.00|10.00|-55.00|-55.00|55.00|55.00|5|5|89|0.00|-50.00|50.00|2.0000|N|Y|M|I|N|Y|N|500.000000|U|25|25|NNNNNNNNNNNNNNNNNNNNNNNNNN|59.00|90.000|920.1303100586|920.1303100586|914.46298514|728.38862138|1184|59.00|0.00|3050|1047|7.1E+01|1.7320848|0|666765|4626|57|1|-||57-666765-4626.1|8|0.0069647||24
0.00|1|2|10|638811116720000000|CDE5|8|666765||LSL8IN|LSL8IN \ 10PT_5mm|MyCarrierID|WaferID|0||17:14|4/24/2025 5:14:32 PM|18.55|0.300|?|915.190|6.374|905.57|923.26|Operator|ResMap5|Engineer|TC|8|10PT_5mm.TPL|125.00|125.00|1.00000|0|Rs|Ohms/sq||10|2|10|99348.000|0.0000750007|0.01287|3.00|0.10|1|MyFavoriteProbe|200.00|10.00|-55.00|-55.00|55.00|55.00|5|5|89|0.00|-50.00|50.00|2.0000|N|Y|M|I|N|Y|N|500.000000|U|25|25|NNNNNNNNNNNNNNNNNNNNNNNNNN|83.00|90.000|921.3920288086|921.3920288086|913.59693033|726.57794711|1184|83.00|0.00|3051|1029|7.6E+01|1.6781629|0|666765|4626|57|1|-||57-666765-4626.1|9|0.0069647||24
0.00|1|2|10|638811116720000000|CDE5|9|666765||LSL8IN|LSL8IN \ 10PT_5mm|MyCarrierID|WaferID|0||17:14|4/24/2025 5:14:32 PM|18.55|0.300|?|915.190|6.374|905.57|923.26|Operator|ResMap5|Engineer|TC|8|10PT_5mm.TPL|125.00|125.00|1.00000|0|Rs|Ohms/sq||10|2|10|99348.000|0.0000750007|0.01287|3.00|0.10|1|MyFavoriteProbe|200.00|10.00|-55.00|-55.00|55.00|55.00|5|5|89|0.00|-50.00|50.00|2.0000|N|Y|M|I|N|Y|N|500.000000|U|25|25|NNNNNNNNNNNNNNNNNNNNNNNNNN|95.00|90.000|905.5722656250|905.5722656250|917.53049853|739.99994302|1184|95.00|0.00|3052|1055|6.7E+01|1.7448909|0|666765|4626|57|1|-||57-666765-4626.1|10|0.0069647||24
NUM_DATA_ROWS|000000010
NUM_DATA_COLUMNS|000000097
DELIMITER|;
START_TIME_FORMAT|MM/dd/yyyy HH:mm:ss
START_TIME|04/24/2025 17:14:32
LOGISTICS_COLUMN|A_LOGISTICS
LOGISTICS_COLUMN|B_LOGISTICS
LOGISTICS_1|A_BASIC_TYPE=;A_INFO=5424R116.RsM.csv;A_INFO2=10;A_JOBID=CDE5;A_MES_ENTITY=CDE5;A_MID=57-666765-4626.1;A_NULL_DATA=;A_PPID=NO_PPID;A_PROCESS_JOBID=;A_PRODUCT=;A_SEQUENCE=638811116720000000;A_WAFER_ID=;A_WAFER_POS=;
LOGISTICS_2|B_BASIC_TYPE=-;B_INFO=-;B_INFO2=;B_JOBID=;B_MES_ENTITY=;B_MID=666765;B_NULL_DATA=;B_PPID=10PT_5mm;B_PROCESS_JOBID=57;B_PRODUCT=4626;B_SEQUENCE=638811116720000000;B_WAFER_ID=-;B_WAFER_POS=-;
END_HEADER

View File

@ -0,0 +1,36 @@
Bio-Rad UniqueId 4/24/2025 6:11:07 PM 6inTHICK 40 667740 5159 1 1 667740 2.520 1 119.11 2 0.00 3 118.87 4 0.00 5 0.00 6 0.00 7 117.12 8 116.95 9 116.18
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 |
|------------------|----------------------|---|----------|----|--------|------|---|---|----|--------|------|----|--------|----|----|----|--------|----|----|----|----|----|----|----|--------|----|--------|----|--------|
| Bio-Rad UniqueId | 4/24/2025 6:11:07 PM | | 6inTHICK | 40 | 667740 | 5159 | 1 | 1 | | 667740 | 2.52 | 1 | 119.11 | 2 | 0 | 3 | 118.87 | 4 | 0 | 5 | 0 | 6 | 0 | 7 | 117.12 | 8 | 116.95 | 9 | 116.18 |
<1>:Bio-Rad UniqueId
<2>:4/24/2025 6:11:07 PM
<3>:
<4>:6inTHICK
<5>:40
<6>:667740
<7>:5159
<8>:1
<9>:1
<10>:
<11>:667740
<12>:2.52
<13>:1
<14>:119.11
<15>:2
<16>:0
<17>:3
<18>:118.87
<19>:4
<20>:0
<21>:5
<22>:0
<23>:6
<24>:0
<25>:7
<26>:117.12
<27>:8
<28>:116.95
<29>:9
<30>:116.18

View File

@ -0,0 +1,80 @@
{
"SentToMetrology": false,
"SentToSPC": false,
"Id": -1,
"Batch": "667740",
"Cassette": "",
"CellName": "BIORAD2",
"Date": "4/24/2025 6:11:07 PM",
"FilePath": "",
"Layer": "1",
"MeanThickness": "117.645",
"Op": "CL",
"PSN": "5159",
"PassFail": "FAIL",
"RDS": "667740",
"RVThickness": "2.520",
"Reactor": "40",
"Recipe": "6inTHICK",
"StdDev": "1.279",
"Title": "Bio-Rad QS400MEPI",
"UniqueId": "BIORAD2_40-667740-5159.1-1_202504241811079527",
"Wafer": "667740",
"Zone": "1",
"Details": [
{
"HeaderUniqueId": "BIORAD2_40-667740-5159.1-1_202504241811079527",
"Position": "1",
"Thickness": "119.11",
"UniqueId": "BIORAD2_40-667740-5159.1-1_202504241811079527_Item-1"
},
{
"HeaderUniqueId": "BIORAD2_40-667740-5159.1-1_202504241811079527",
"Position": "2",
"Thickness": "0.00",
"UniqueId": "BIORAD2_40-667740-5159.1-1_202504241811079527_Item-2"
},
{
"HeaderUniqueId": "BIORAD2_40-667740-5159.1-1_202504241811079527",
"Position": "3",
"Thickness": "118.87",
"UniqueId": "BIORAD2_40-667740-5159.1-1_202504241811079527_Item-3"
},
{
"HeaderUniqueId": "BIORAD2_40-667740-5159.1-1_202504241811079527",
"Position": "4",
"Thickness": "0.00",
"UniqueId": "BIORAD2_40-667740-5159.1-1_202504241811079527_Item-4"
},
{
"HeaderUniqueId": "BIORAD2_40-667740-5159.1-1_202504241811079527",
"Position": "5",
"Thickness": "0.00",
"UniqueId": "BIORAD2_40-667740-5159.1-1_202504241811079527_Item-5"
},
{
"HeaderUniqueId": "BIORAD2_40-667740-5159.1-1_202504241811079527",
"Position": "6",
"Thickness": "0.00",
"UniqueId": "BIORAD2_40-667740-5159.1-1_202504241811079527_Item-6"
},
{
"HeaderUniqueId": "BIORAD2_40-667740-5159.1-1_202504241811079527",
"Position": "7",
"Thickness": "117.12",
"UniqueId": "BIORAD2_40-667740-5159.1-1_202504241811079527_Item-7"
},
{
"HeaderUniqueId": "BIORAD2_40-667740-5159.1-1_202504241811079527",
"Position": "8",
"Thickness": "116.95",
"UniqueId": "BIORAD2_40-667740-5159.1-1_202504241811079527_Item-8"
},
{
"HeaderUniqueId": "BIORAD2_40-667740-5159.1-1_202504241811079527",
"Position": "9",
"Thickness": "116.18",
"UniqueId": "BIORAD2_40-667740-5159.1-1_202504241811079527_Item-9"
}
]
}

View File

@ -0,0 +1,55 @@
HEADER_TAG HEADER_VALUE
FORMAT 2.00
NUMBER_PASSES 0001
HEADER_OFFSET H#######T
DATA_OFFSET D#######T
END_OFFSET E#######T
"Time" "A_LOGISTICS" "B_LOGISTICS" "Test" "Count" "Index" "MesEntity" "Date" "Employee" "Lot" "PSN" "Reactor" "Recipe" "Cassette" "HeaderUniqueId" "Layer" "PassFail" "Position" "RDS" "Title" "UniqueId" "Wafer" "Zone" "MeanThickness" "RVThickness" "StdDev" "Thickness" "Slot" "ThicknessFourteen3mmEdgeMean" "ThicknessFourteen3mmEdgePercent" "ThicknessFourteen5mmEdgeMean" "ThicknessFourteen5mmEdgePercent" "ThicknessFourteenCenterMean" "ThicknessFourteenCriticalPointsAverage" "ThicknessFourteenCriticalPointsStdDev" "ThicknessFourteenMeanFrom" "Thickness01" "Thickness02" "Thickness03" "Thickness04" "Thickness05" "Thickness06" "Thickness07" "Thickness08" "Thickness09" "Thickness10" "Thickness11" "Thickness12" "Thickness13" "Thickness14"
0.00 1 2 25 9 0 BIORAD2 4/24/2025 6:11:07 PM CL 667740 5159 40 6inTHICK HeaderUniqueId 1 FAIL 1 667740 Bio-Rad QS400MEPI UniqueId 667740 1 117.645 2.520 1.279 119.11 00 119.11
0.00 1 2 25 9 1 BIORAD2 4/24/2025 6:11:07 PM CL 667740 5159 40 6inTHICK HeaderUniqueId 1 FAIL 2 667740 Bio-Rad QS400MEPI UniqueId 667740 1 117.645 2.520 1.279 0.00 00 0.00
0.00 1 2 25 9 2 BIORAD2 4/24/2025 6:11:07 PM CL 667740 5159 40 6inTHICK HeaderUniqueId 1 FAIL 3 667740 Bio-Rad QS400MEPI UniqueId 667740 1 117.645 2.520 1.279 118.87 00 118.87
0.00 1 2 25 9 3 BIORAD2 4/24/2025 6:11:07 PM CL 667740 5159 40 6inTHICK HeaderUniqueId 1 FAIL 4 667740 Bio-Rad QS400MEPI UniqueId 667740 1 117.645 2.520 1.279 0.00 00 0.00
0.00 1 2 25 9 4 BIORAD2 4/24/2025 6:11:07 PM CL 667740 5159 40 6inTHICK HeaderUniqueId 1 FAIL 5 667740 Bio-Rad QS400MEPI UniqueId 667740 1 117.645 2.520 1.279 0.00 00 0.00
0.00 1 2 25 9 5 BIORAD2 4/24/2025 6:11:07 PM CL 667740 5159 40 6inTHICK HeaderUniqueId 1 FAIL 6 667740 Bio-Rad QS400MEPI UniqueId 667740 1 117.645 2.520 1.279 0.00 00 0.00
0.00 1 2 25 9 6 BIORAD2 4/24/2025 6:11:07 PM CL 667740 5159 40 6inTHICK HeaderUniqueId 1 FAIL 7 667740 Bio-Rad QS400MEPI UniqueId 667740 1 117.645 2.520 1.279 117.12 00 117.12
0.00 1 2 25 9 7 BIORAD2 4/24/2025 6:11:07 PM CL 667740 5159 40 6inTHICK HeaderUniqueId 1 FAIL 8 667740 Bio-Rad QS400MEPI UniqueId 667740 1 117.645 2.520 1.279 116.95 00 116.95
0.00 1 2 25 9 8 BIORAD2 4/24/2025 6:11:07 PM CL 667740 5159 40 6inTHICK HeaderUniqueId 1 FAIL 9 667740 Bio-Rad QS400MEPI UniqueId 667740 1 117.645 2.520 1.279 116.18 00 116.18
NUM_DATA_ROWS 000000009
NUM_DATA_COLUMNS 000000050
DELIMITER ;
START_TIME_FORMAT MM/dd/yyyy HH:mm:ss
START_TIME 04/24/2025 18:11:07
LOGISTICS_COLUMN A_LOGISTICS
LOGISTICS_COLUMN B_LOGISTICS
LOGISTICS_1 A_HeaderId=514141;A_SubgroupId=1745543491;A_BASIC_TYPE=;A_INFO=202504241811079527.TXT.csv;A_INFO2=9;A_JOBID=BIORAD2;A_MES_ENTITY=BIORAD2;A_MID=40-667740-5159.1-1;A_NULL_DATA=;A_PPID=NO_PPID;A_PROCESS_JOBID=;A_PRODUCT=;A_SEQUENCE=638811150679527382;A_WAFER_ID=;A_WAFER_POS=;
LOGISTICS_2 B_HeaderId=514141;B_SubgroupId=1745543491;B_BASIC_TYPE=- EpiPro 5000;B_INFO=-;B_INFO2=;B_JOBID=;B_MES_ENTITY=;B_MID=667740;B_NULL_DATA=;B_PPID=6inTHICK;B_PROCESS_JOBID=40;B_PRODUCT=5159;B_SEQUENCE=638811150679527382;B_WAFER_ID=-;B_WAFER_POS=1;
EOF
HEADER_TAG|HEADER_VALUE
FORMAT|2.00
NUMBER_PASSES|0001
HEADER_OFFSET|000003202
DATA_OFFSET|000000128
END_OFFSET|000003871
|Time|A_LOGISTICS|B_LOGISTICS|Count|Sequence|MesEntity|Index|Title|Recipe|DateTime|Operator|Batch|Cassette|UsedLast|Wafer|Position|Thickness|WaferMeanThickness|StdDev|PassFail|Line|RadialVariationThickness|Slot|RDS|PSN|Reactor|Layer|Zone|Employee|InferredLot|Thickness 14 3mm Edge Mean|Thickness 14 3mm Edge % from R/2|Thickness 14 5mm Edge Mean|Thickness 14 5mm Edge % from R/2|Thickness 14 Center Mean|Thickness 14 Average|Thickness 14 Std Dev|Thickness 14 R 2/Mean|Thickness01|Thickness02|Thickness03|Thickness04|Thickness05|Thickness06|Thickness07|Thickness08|Thickness09|Thickness10|Thickness11|Thickness12|Thickness13|Thickness14|EventId|
|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|
0.00|1|2|9|638811150679527382|BIORAD2|0|Bio-Rad QS400MEPI|6inTHICK|4/24/2025 6:11:07 PM|CL|BIORAD#2||True|667740|1|119.11|117.645|1.279|FAIL|Radial variation (computation B) PASS:|2.520|00|667740|5159|40|1|1||40-667740-5159.1-1|||||||||119.11||||||||||||||25
0.00|1|2|9|638811150679527382|BIORAD2|1|Bio-Rad QS400MEPI|6inTHICK|4/24/2025 6:11:07 PM|CL|BIORAD#2||True|667740|2|0.00|117.645|1.279|FAIL|Radial variation (computation B) PASS:|2.520|00|667740|5159|40|1|1||40-667740-5159.1-1||||||||||0.00|||||||||||||25
0.00|1|2|9|638811150679527382|BIORAD2|2|Bio-Rad QS400MEPI|6inTHICK|4/24/2025 6:11:07 PM|CL|BIORAD#2||True|667740|3|118.87|117.645|1.279|FAIL|Radial variation (computation B) PASS:|2.520|00|667740|5159|40|1|1||40-667740-5159.1-1|||||||||||118.87||||||||||||25
0.00|1|2|9|638811150679527382|BIORAD2|3|Bio-Rad QS400MEPI|6inTHICK|4/24/2025 6:11:07 PM|CL|BIORAD#2||True|667740|4|0.00|117.645|1.279|FAIL|Radial variation (computation B) PASS:|2.520|00|667740|5159|40|1|1||40-667740-5159.1-1||||||||||||0.00|||||||||||25
0.00|1|2|9|638811150679527382|BIORAD2|4|Bio-Rad QS400MEPI|6inTHICK|4/24/2025 6:11:07 PM|CL|BIORAD#2||True|667740|5|0.00|117.645|1.279|FAIL|Radial variation (computation B) PASS:|2.520|00|667740|5159|40|1|1||40-667740-5159.1-1|||||||||||||0.00||||||||||25
0.00|1|2|9|638811150679527382|BIORAD2|5|Bio-Rad QS400MEPI|6inTHICK|4/24/2025 6:11:07 PM|CL|BIORAD#2||True|667740|6|0.00|117.645|1.279|FAIL|Radial variation (computation B) PASS:|2.520|00|667740|5159|40|1|1||40-667740-5159.1-1||||||||||||||0.00|||||||||25
0.00|1|2|9|638811150679527382|BIORAD2|6|Bio-Rad QS400MEPI|6inTHICK|4/24/2025 6:11:07 PM|CL|BIORAD#2||True|667740|7|117.12|117.645|1.279|FAIL|Radial variation (computation B) PASS:|2.520|00|667740|5159|40|1|1||40-667740-5159.1-1|||||||||||||||117.12||||||||25
0.00|1|2|9|638811150679527382|BIORAD2|7|Bio-Rad QS400MEPI|6inTHICK|4/24/2025 6:11:07 PM|CL|BIORAD#2||True|667740|8|116.95|117.645|1.279|FAIL|Radial variation (computation B) PASS:|2.520|00|667740|5159|40|1|1||40-667740-5159.1-1||||||||||||||||116.95|||||||25
0.00|1|2|9|638811150679527382|BIORAD2|8|Bio-Rad QS400MEPI|6inTHICK|4/24/2025 6:11:07 PM|CL|BIORAD#2||True|667740|9|116.18|117.645|1.279|FAIL|Radial variation (computation B) PASS:|2.520|00|667740|5159|40|1|1||40-667740-5159.1-1|||||||||||||||||116.18||||||25
NUM_DATA_ROWS|000000009
NUM_DATA_COLUMNS|000000053
DELIMITER|;
START_TIME_FORMAT|MM/dd/yyyy HH:mm:ss
START_TIME|04/24/2025 18:11:07
LOGISTICS_COLUMN|A_LOGISTICS
LOGISTICS_COLUMN|B_LOGISTICS
LOGISTICS_1|A_BASIC_TYPE=;A_INFO=202504241811079527.TXT.csv;A_INFO2=9;A_JOBID=BIORAD2;A_MES_ENTITY=BIORAD2;A_MID=40-667740-5159.1-1;A_NULL_DATA=;A_PPID=NO_PPID;A_PROCESS_JOBID=;A_PRODUCT=;A_SEQUENCE=638811150679527382;A_WAFER_ID=;A_WAFER_POS=;
LOGISTICS_2|B_BASIC_TYPE=- EpiPro 5000;B_INFO=-;B_INFO2=;B_JOBID=;B_MES_ENTITY=;B_MID=667740;B_NULL_DATA=;B_PPID=6inTHICK;B_PROCESS_JOBID=40;B_PRODUCT=5159;B_SEQUENCE=638811150679527382;B_WAFER_ID=-;B_WAFER_POS=1;
END_HEADER

View File

@ -0,0 +1,22 @@
Stratus_32-667283-5095_20250424074408371 4/24/2025 7:44:08 PM BIORAD5 FQA Thickness 6in_CENTERPOINT 32 667283 5095 _24_19_41 667283 6.971 1 6.963 25 6.980
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 |
|------------------------------------------|----------------------|---------|---------------|---|-----------------|----|--------|------|-----------|--------|-------|----|-------|----|------|
| Stratus_32-667283-5095_20250424074408371 | 4/24/2025 7:44:08 PM | BIORAD5 | FQA Thickness | | 6in_CENTERPOINT | 32 | 667283 | 5095 | _24_19_41 | 667283 | 6.971 | 1 | 6.963 | 25 | 6.98 |
<1>:Stratus_32-667283-5095_20250424074408371
<2>:4/24/2025 7:44:08 PM
<3>:BIORAD5
<4>:FQA Thickness
<5>:
<6>:6in_CENTERPOINT
<7>:32
<8>:667283
<9>:5095
<10>:_24_19_41
<11>:667283
<12>:6.971
<13>:1
<14>:6.963
<15>:25
<16>:6.98

View File

@ -0,0 +1,59 @@
{
"Id": -1,
"Batch": "_24_19_41",
"Cassette": "667283",
"CellName": "BIORAD5",
"Date": "4/24/2025 7:44:08 PM",
"FilePath": "",
"MeanThickness": "6.971",
"Operator": "",
"PSN": "5095",
"RDS": "667283",
"Reactor": "32",
"Recipe": "6in_CENTERPOINT",
"StdDev": "0.0115",
"Title": "_24_19_41",
"UniqueId": "BIORAD5_32-667283-5095_202504241944083711",
"Details": [
{
"HeaderUniqueId": "BIORAD5_32-667283-5095_202504241944083711",
"Mean": "6.963",
"PassFail": "PASS",
"Position": "1",
"Recipe": "6in_CENTERPOINT",
"Slot": "1",
"StdDev": "0",
"UniqueId": "BIORAD5_32-667283-5095_202504241944083711_Item-1",
"Thickness": "6.963",
"Wafer": "Wafer 1",
"Points": [
{
"HeaderUniqueId": "HeaderUniqueId",
"Position": "1",
"Thickness": "6.963",
"UniqueId": "UniqueId"
}
]
},
{
"HeaderUniqueId": "BIORAD5_32-667283-5095_202504241944083711",
"Mean": "6.980",
"PassFail": "PASS",
"Position": "25",
"Recipe": "6in_CENTERPOINT",
"Slot": "25",
"StdDev": "0",
"UniqueId": "BIORAD5_32-667283-5095_202504241944083711_Item-2",
"Thickness": "6.980",
"Wafer": "Wafer 25",
"Points": [
{
"HeaderUniqueId": "HeaderUniqueId",
"Position": "25",
"Thickness": "6.980",
"UniqueId": "UniqueId"
}
]
}
]
}

View File

@ -0,0 +1,41 @@
HEADER_TAG HEADER_VALUE
FORMAT 2.00
NUMBER_PASSES 0001
HEADER_OFFSET H#######T
DATA_OFFSET D#######T
END_OFFSET E#######T
"Time" "A_LOGISTICS" "B_LOGISTICS" "Test" "Count" "Index" "MesEntity" "MID" "Date" "Employee" "Lot" "PSN" "Reactor" "Recipe" "Cassette" "GradeStdDev" "HeaderUniqueId" "Layer" "MeanThickness" "PassFail" "RDS" "Slot" "Title" "UniqueId" "Wafer" "Zone" "Mean" "Position" "StdDev" "Thickness" "ThicknessSlotOne" "ThicknessSlotTwentyFive" "DeltaThicknessSlotsOneAndTwentyFive" "PercentDeltaThicknessSlotsOneAndTwentyFive"
0.00 1 2 26 2 0 BIORAD5 667283 4/24/2025 7:44:08 PM _24_19_41 5095 32 6in_CENTERPOINT 667283 0.0115 HeaderUniqueId - 6.971 PASS 667283 1 _24_19_41 UniqueId Wafer 1 - 6.963 1 0 6.963 ThicknessSlotOne ThicknessSlotTwentyFive
0.00 1 2 26 2 1 BIORAD5 667283 4/24/2025 7:44:08 PM _24_19_41 5095 32 6in_CENTERPOINT 667283 0.0115 HeaderUniqueId - 6.971 PASS 667283 25 _24_19_41 UniqueId Wafer 25 - 6.980 25 0 6.980 ThicknessSlotOne ThicknessSlotTwentyFive
NUM_DATA_ROWS 000000002
NUM_DATA_COLUMNS 000000034
DELIMITER ;
START_TIME_FORMAT MM/dd/yyyy HH:mm:ss
START_TIME 04/24/2025 19:44:08
LOGISTICS_COLUMN A_LOGISTICS
LOGISTICS_COLUMN B_LOGISTICS
LOGISTICS_1 A_HeaderId=348729;A_SubgroupId=1745549064;A_BASIC_TYPE=;A_INFO=DataBiorad.txt-0.csv;A_INFO2=2;A_JOBID=BIORAD5;A_MES_ENTITY=BIORAD5;A_MID=32-667283-5095;A_NULL_DATA=;A_PPID=NO_PPID;A_PROCESS_JOBID=;A_PRODUCT=;A_SEQUENCE=638811206483711430;A_WAFER_ID=;A_WAFER_POS=;
LOGISTICS_2 B_HeaderId=348729;B_SubgroupId=1745549064;B_BASIC_TYPE=Left - High Thruput;B_INFO=-;B_INFO2=;B_JOBID=;B_MES_ENTITY=;B_MID=667283;B_NULL_DATA=;B_PPID=6in_CENTERPOINT;B_PROCESS_JOBID=32;B_PRODUCT=5095;B_SEQUENCE=638811206483711430;B_WAFER_ID=-;B_WAFER_POS=-;
EOF
HEADER_TAG|HEADER_VALUE
FORMAT|2.00
NUMBER_PASSES|0001
HEADER_OFFSET|000000838
DATA_OFFSET|000000128
END_OFFSET|000001510
|Time|A_LOGISTICS|B_LOGISTICS|Count|Sequence|MesEntity|Index|Batch|Cassette|DateTime|Destination|Mean|PassFail|Recipe|Reference|Site|Slot|Source|StdDev|Text|GradeMean|GradeStdDev|RDS|PSN|Reactor|Layer|Zone|Employee|InferredLot|Actual Delta Thick Pts 1 and 25|% Delta Thick Pts 1 and 25|EventId|
|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|
0.00|1|2|2|638811206483711430|BIORAD5|0|_24_19_41|667283|4/24/2025 7:44:08 PM||6.963|PASS|6in_CENTERPOINT||6.963|1||0|Wafer 1|6.971|0.0115|667283|5095|32|-|-||_24_19_41|||26
0.00|1|2|2|638811206483711430|BIORAD5|1|_24_19_41|667283|4/24/2025 7:44:08 PM||6.980|PASS|6in_CENTERPOINT||6.980|25||0|Wafer 25|6.971|0.0115|667283|5095|32|-|-||_24_19_41|||26
NUM_DATA_ROWS|000000002
NUM_DATA_COLUMNS|000000032
DELIMITER|;
START_TIME_FORMAT|MM/dd/yyyy HH:mm:ss
START_TIME|04/24/2025 19:44:08
LOGISTICS_COLUMN|A_LOGISTICS
LOGISTICS_COLUMN|B_LOGISTICS
LOGISTICS_1|A_BASIC_TYPE=;A_INFO=DataBiorad.txt-0.csv;A_INFO2=2;A_JOBID=BIORAD5;A_MES_ENTITY=BIORAD5;A_MID=32-667283-5095;A_NULL_DATA=;A_PPID=NO_PPID;A_PROCESS_JOBID=;A_PRODUCT=;A_SEQUENCE=638811206483711430;A_WAFER_ID=;A_WAFER_POS=;
LOGISTICS_2|B_BASIC_TYPE=Left - High Thruput;B_INFO=-;B_INFO2=;B_JOBID=;B_MES_ENTITY=;B_MID=667283;B_NULL_DATA=;B_PPID=6in_CENTERPOINT;B_PROCESS_JOBID=32;B_PRODUCT=5095;B_SEQUENCE=638811206483711430;B_WAFER_ID=-;B_WAFER_POS=-;
END_HEADER

View File

@ -0,0 +1,103 @@
UniqueId HGCV2 46 667776 5159 - - ZONE2 667776 5PT MES 4/25/2025 8:40:01 AM 150.00 1.02 2.130E-002 N PARALLEL -5.00 -20.00 2500 2000.00 6IN5PT 6IN5PT SSMDATA 6_5PT10M.PAT ASTM: F723 - 82 7.599e+013 2.352e+000 2.799e+000 7.634e+013 2.352e+000 2.766e+000 3.342e-001 4.365e+001 4.605e+001 1.713e+001 2.053e+000 2.563e+000 5.632e+001 2.315e+000 2.779e+000 5.607e+001 2.321e+000 2.746e+000 9.000e+001 -1.000e+000 0.000e+000 2.251e+000 2.931e+001 3.713e+001 -1.000e+000 -1.000e+000 0.000e+000 1 7.854E+013 7.882E+013 0.294 17.109 54.482 54.286 90.000 2.193 2 7.447E+013 7.472E+013 0.216 17.428 57.431 57.247 90.000 1.898 3 7.426E+013 7.458E+013 0.250 17.496 57.596 57.352 90.000 2.414 4 7.695E+013 7.733E+013 0.327 16.621 55.595 55.324 90.000 1.493 5 7.571E+013 7.623E+013 0.584 17.015 56.500 56.121 90.000 3.257
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 |
|----------|-------|----|--------|------|---|---|-------|--------|---------|----------------------|-----|------|----------|----|----------|----|-----|------|------|--------|--------|---------|--------------|-----------------|----------|----------|----------|----------|----------|----------|----------|----------|----------|----------|----------|----------|----------|----------|----------|----------|----------|----------|----------|-----------|----------|----------|----------|----------|-----------|-----------|----------|----|----------|----------|-------|--------|--------|--------|----|-------|----|----------|----------|-------|--------|--------|--------|----|-------|----|----------|----------|------|--------|--------|--------|----|-------|----|----------|----------|-------|--------|--------|--------|----|-------|----|----------|----------|-------|--------|------|--------|----|-------|
| UniqueId | HGCV2 | 46 | 667776 | 5159 | - | - | ZONE2 | 667776 | 5PT MES | 4/25/2025 8:40:01 AM | 150 | 1.02 | 2.13E-02 | N | PARALLEL | -5 | -20 | 2500 | 2000 | 6IN5PT | 6IN5PT | SSMDATA | 6_5PT10M.PAT | ASTM: F723 - 82 | 7.60E+13 | 2.35E+00 | 2.80E+00 | 7.63E+13 | 2.35E+00 | 2.77E+00 | 3.34E-01 | 4.37E+01 | 4.61E+01 | 1.71E+01 | 2.05E+00 | 2.56E+00 | 5.63E+01 | 2.32E+00 | 2.78E+00 | 5.61E+01 | 2.32E+00 | 2.75E+00 | 9.00E+01 | -1.00E+00 | 0.00E+00 | 2.25E+00 | 2.93E+01 | 3.71E+01 | -1.00E+00 | -1.00E+00 | 0.00E+00 | 1 | 7.85E+13 | 7.88E+13 | 0.294 | 17.109 | 54.482 | 54.286 | 90 | 2.193 | 2 | 7.45E+13 | 7.47E+13 | 0.216 | 17.428 | 57.431 | 57.247 | 90 | 1.898 | 3 | 7.43E+13 | 7.46E+13 | 0.25 | 17.496 | 57.596 | 57.352 | 90 | 2.414 | 4 | 7.70E+13 | 7.73E+13 | 0.327 | 16.621 | 55.595 | 55.324 | 90 | 1.493 | 5 | 7.57E+13 | 7.62E+13 | 0.584 | 17.015 | 56.5 | 56.121 | 90 | 3.257 |
<1>:UniqueId
<2>:HGCV2
<3>:46
<4>:667776
<5>:5159
<6>:-
<7>:-
<8>:ZONE2
<9>:667776
<10>:5PT MES
<11>:4/25/2025 8:40:01 AM
<12>:150
<13>:1.02
<14>:0.0213
<15>:N
<16>:PARALLEL
<17>:-5
<18>:-20
<19>:2500
<20>:2000
<21>:6IN5PT
<22>:6IN5PT
<23>:SSMDATA
<24>:6_5PT10M.PAT
<25>:ASTM: F723 - 82
<26>:7.599E+13
<27>:2.352
<28>:2.799
<29>:7.634E+13
<30>:2.352
<31>:2.766
<32>:0.3342
<33>:43.65
<34>:46.05
<35>:17.13
<36>:2.053
<37>:2.563
<38>:56.32
<39>:2.315
<40>:2.779
<41>:56.07
<42>:2.321
<43>:2.746
<44>:90
<45>:-1
<46>:0
<47>:2.251
<48>:29.31
<49>:37.13
<50>:-1
<51>:-1
<52>:0
<53>:1
<54>:7.854E+13
<55>:7.882E+13
<56>:0.294
<57>:17.109
<58>:54.482
<59>:54.286
<60>:90
<61>:2.193
<62>:2
<63>:7.447E+13
<64>:7.472E+13
<65>:0.216
<66>:17.428
<67>:57.431
<68>:57.247
<69>:90
<70>:1.898
<71>:3
<72>:7.426E+13
<73>:7.458E+13
<74>:0.25
<75>:17.496
<76>:57.596
<77>:57.352
<78>:90
<79>:2.414
<80>:4
<81>:7.695E+13
<82>:7.733E+13
<83>:0.327
<84>:16.621
<85>:55.595
<86>:55.324
<87>:90
<88>:1.493
<89>:5
<90>:7.571E+13
<91>:7.623E+13
<92>:0.584
<93>:17.015
<94>:56.5
<95>:56.121
<96>:90
<97>:3.257

View File

@ -0,0 +1,119 @@
{
"SentToMetrology": false,
"SentToSPC": false,
"Area": "2.130E-002",
"Ccomp": "1.02",
"CellName": "HGCV2",
"CondType": "N",
"Date": "4/25/2025 8:40:01 AM",
"FlatZMean": "1.713e\u002B001",
"FlatZRadialGradient": "2.563e\u002B000",
"FlatZStdDev": "2.053e\u002B000",
"Folder": "SSMDATA",
"GLimit": "2000.00",
"GradeMean": "2.251e\u002B000",
"GradeRadialGradient": "3.713e\u002B001",
"GradeStdDev": "2.931e\u002B001",
"Id": -1,
"Layer": "-",
"Lot": "667776",
"Model": "PARALLEL",
"NAvgMean": "7.599e\u002B013",
"NAvgRadialGradient": "2.799e\u002B000",
"NAvgStdDev": "2.352e\u002B000",
"NslMean": "7.634e\u002B013",
"NslRadialGradient": "2.766e\u002B000",
"NslStdDev": "2.352e\u002B000",
"Operator": "HGCV2",
"PSN": "5159",
"Pattern": "6_5PT10M.PAT",
"PhaseMean": "9.000e\u002B001",
"PhaseRadialGradient": "0.000e\u002B000",
"PhaseStdDev": "-1.000e\u002B000",
"Plan": "5PT MES",
"RDS": "667776",
"RampRate": "2500",
"Reactor": "46",
"RhoAvgMean": "5.632e\u002B001",
"RhoAvgRadialGradient": "2.779e\u002B000",
"RhoAvgStdDev": "2.315e\u002B000",
"RhoMethod": "ASTM: F723 - 82",
"RhoslMean": "5.607e\u002B001",
"RhoslRadialGradient": "2.746e\u002B000",
"RhoslStdDev": "2.321e\u002B000",
"RsMean": "-1.000e\u002B000",
"RsRadialGradient": "0.000e\u002B000",
"RsStdDev": "-1.000e\u002B000",
"SetupFile": "6IN5PT",
"StartVoltage": "-5.00",
"StopVoltage": "-20.00",
"UniqueId": "HGCV2_46-667776-5159_202504250840019538",
"VdMean": "3.342e-001",
"VdRadialGradient": "4.605e\u002B001",
"VdStdDev": "4.365e\u002B001",
"Wafer": "ZONE2",
"WaferSize": "150.00",
"Zone": "-",
"Details": [
{
"FlatZ": "17.109",
"Grade": "2.193",
"HeaderUniqueId": "HGCV2_46-667776-5159_202504250840019538",
"NAvg": "7.854E\u002B013",
"Nsl": "7.882E\u002B013",
"Phase": "90.000",
"RhoAvg": "54.482",
"Rhosl": "54.286",
"UniqueId": "HGCV2_46-667776-5159_202504250840019538_Item-1",
"Vd": "0.294"
},
{
"FlatZ": "17.428",
"Grade": "1.898",
"HeaderUniqueId": "HGCV2_46-667776-5159_202504250840019538",
"NAvg": "7.447E\u002B013",
"Nsl": "7.472E\u002B013",
"Phase": "90.000",
"RhoAvg": "57.431",
"Rhosl": "57.247",
"UniqueId": "HGCV2_46-667776-5159_202504250840019538_Item-2",
"Vd": "0.216"
},
{
"FlatZ": "17.496",
"Grade": "2.414",
"HeaderUniqueId": "HGCV2_46-667776-5159_202504250840019538",
"NAvg": "7.426E\u002B013",
"Nsl": "7.458E\u002B013",
"Phase": "90.000",
"RhoAvg": "57.596",
"Rhosl": "57.352",
"UniqueId": "HGCV2_46-667776-5159_202504250840019538_Item-3",
"Vd": "0.250"
},
{
"FlatZ": "16.621",
"Grade": "1.493",
"HeaderUniqueId": "HGCV2_46-667776-5159_202504250840019538",
"NAvg": "7.695E\u002B013",
"Nsl": "7.733E\u002B013",
"Phase": "90.000",
"RhoAvg": "55.595",
"Rhosl": "55.324",
"UniqueId": "HGCV2_46-667776-5159_202504250840019538_Item-4",
"Vd": "0.327"
},
{
"FlatZ": "17.015",
"Grade": "3.257",
"HeaderUniqueId": "HGCV2_46-667776-5159_202504250840019538",
"NAvg": "7.571E\u002B013",
"Nsl": "7.623E\u002B013",
"Phase": "90.000",
"RhoAvg": "56.500",
"Rhosl": "56.121",
"UniqueId": "HGCV2_46-667776-5159_202504250840019538_Item-5",
"Vd": "0.584"
}
]
}

View File

@ -0,0 +1,47 @@
HEADER_TAG HEADER_VALUE
FORMAT 2.00
NUMBER_PASSES 0001
HEADER_OFFSET H#######T
DATA_OFFSET D#######T
END_OFFSET E#######T
"Time" "A_LOGISTICS" "B_LOGISTICS" "Test" "Count" "Index" "MesEntity" "Date" "Employee" "Lot" "PSN" "Reactor" "Recipe" "Area" "Folder" "HeaderUniqueId" "Id" "Layer" "Model" "Pattern" "Phase" "Plan" "RampRate" "RDS" "SetupFile" "StartVoltage" "StopVoltage" "UniqueId" "Wafer" "WaferSize" "Zone" "Ccomp" "CondType" "FlatZ" "FlatZMean" "FlatZRadialGradient" "FlatZStdDev" "GLimit" "Grade" "GradeMean" "GradeRadialGradient" "GradeStdDev" "NAvg" "NAvgMean" "NAvgRadialGradient" "NAvgStdDev" "Nsl" "NslMean" "NslRadialGradient" "NslStdDev" "PhaseMean" "PhaseRadialGradient" "PhaseStdDev" "RhoAvg" "RhoAvgMean" "RhoAvgRadialGradient" "RhoAvgStdDev" "RhoMethod" "Rhosl" "RhoslMean" "RhoslRadialGradient" "RhoslStdDev" "RsMean" "RsRadialGradient" "RsStdDev" "Vd" "VdMean" "VdRadialGradient" "VdStdDev" "Variation" "AreaDeltaFromLastRun" "Nine10mmEdgeMean" "Nine4mmEdgeMean" "NineCriticalPointsAverage" "NineCriticalPointsPhaseAngleAverage" "NineCriticalPointsStdDev" "NineEdgeMeanDelta" "NineMean" "NineResRangePercent" "RhoAvg01" "RhoAvg02" "RhoAvg03" "RhoAvg04" "RhoAvg05" "RhoAvg06" "RhoAvg07" "RhoAvg08" "RhoAvg09"
0.00 1 2 23 5 0 HGCV2 4/25/2025 8:40:01 AM 667776 5159 46 Recipe 2.130E-002 SSMDATA HeaderUniqueId Id - PARALLEL 6_5PT10M.PAT 90.000 5PT MES 2500 667776 6IN5PT -5.00 -20.00 UniqueId ZONE2 150.00 - 1.02 N 17.109 1.713e+001 2.563e+000 2.053e+000 2000.00 2.193 2.251e+000 3.713e+001 2.931e+001 7.854E+013 7.599e+013 2.799e+000 2.352e+000 7.882E+013 7.634e+013 2.766e+000 2.352e+000 9.000e+001 0.000e+000 -1.000e+000 54.482 5.632e+001 2.779e+000 2.315e+000 ASTM: F723 - 82 54.286 5.607e+001 2.746e+000 2.321e+000 -1.000e+000 0.000e+000 -1.000e+000 0.294 3.342e-001 4.605e+001 4.365e+001 54.482
0.00 1 2 23 5 1 HGCV2 4/25/2025 8:40:01 AM 667776 5159 46 Recipe 2.130E-002 SSMDATA HeaderUniqueId Id - PARALLEL 6_5PT10M.PAT 90.000 5PT MES 2500 667776 6IN5PT -5.00 -20.00 UniqueId ZONE2 150.00 - 1.02 N 17.428 1.713e+001 2.563e+000 2.053e+000 2000.00 1.898 2.251e+000 3.713e+001 2.931e+001 7.447E+013 7.599e+013 2.799e+000 2.352e+000 7.472E+013 7.634e+013 2.766e+000 2.352e+000 9.000e+001 0.000e+000 -1.000e+000 57.431 5.632e+001 2.779e+000 2.315e+000 ASTM: F723 - 82 57.247 5.607e+001 2.746e+000 2.321e+000 -1.000e+000 0.000e+000 -1.000e+000 0.216 3.342e-001 4.605e+001 4.365e+001 57.431
0.00 1 2 23 5 2 HGCV2 4/25/2025 8:40:01 AM 667776 5159 46 Recipe 2.130E-002 SSMDATA HeaderUniqueId Id - PARALLEL 6_5PT10M.PAT 90.000 5PT MES 2500 667776 6IN5PT -5.00 -20.00 UniqueId ZONE2 150.00 - 1.02 N 17.496 1.713e+001 2.563e+000 2.053e+000 2000.00 2.414 2.251e+000 3.713e+001 2.931e+001 7.426E+013 7.599e+013 2.799e+000 2.352e+000 7.458E+013 7.634e+013 2.766e+000 2.352e+000 9.000e+001 0.000e+000 -1.000e+000 57.596 5.632e+001 2.779e+000 2.315e+000 ASTM: F723 - 82 57.352 5.607e+001 2.746e+000 2.321e+000 -1.000e+000 0.000e+000 -1.000e+000 0.250 3.342e-001 4.605e+001 4.365e+001 57.596
0.00 1 2 23 5 3 HGCV2 4/25/2025 8:40:01 AM 667776 5159 46 Recipe 2.130E-002 SSMDATA HeaderUniqueId Id - PARALLEL 6_5PT10M.PAT 90.000 5PT MES 2500 667776 6IN5PT -5.00 -20.00 UniqueId ZONE2 150.00 - 1.02 N 16.621 1.713e+001 2.563e+000 2.053e+000 2000.00 1.493 2.251e+000 3.713e+001 2.931e+001 7.695E+013 7.599e+013 2.799e+000 2.352e+000 7.733E+013 7.634e+013 2.766e+000 2.352e+000 9.000e+001 0.000e+000 -1.000e+000 55.595 5.632e+001 2.779e+000 2.315e+000 ASTM: F723 - 82 55.324 5.607e+001 2.746e+000 2.321e+000 -1.000e+000 0.000e+000 -1.000e+000 0.327 3.342e-001 4.605e+001 4.365e+001 55.595
0.00 1 2 23 5 4 HGCV2 4/25/2025 8:40:01 AM 667776 5159 46 Recipe 2.130E-002 SSMDATA HeaderUniqueId Id - PARALLEL 6_5PT10M.PAT 90.000 5PT MES 2500 667776 6IN5PT -5.00 -20.00 UniqueId ZONE2 150.00 - 1.02 N 17.015 1.713e+001 2.563e+000 2.053e+000 2000.00 3.257 2.251e+000 3.713e+001 2.931e+001 7.571E+013 7.599e+013 2.799e+000 2.352e+000 7.623E+013 7.634e+013 2.766e+000 2.352e+000 9.000e+001 0.000e+000 -1.000e+000 56.500 5.632e+001 2.779e+000 2.315e+000 ASTM: F723 - 82 56.121 5.607e+001 2.746e+000 2.321e+000 -1.000e+000 0.000e+000 -1.000e+000 0.584 3.342e-001 4.605e+001 4.365e+001 56.500
NUM_DATA_ROWS 000000005
NUM_DATA_COLUMNS 000000088
DELIMITER ;
START_TIME_FORMAT MM/dd/yyyy HH:mm:ss
START_TIME 04/25/2025 08:40:01
LOGISTICS_COLUMN A_LOGISTICS
LOGISTICS_COLUMN B_LOGISTICS
LOGISTICS_1 A_HeaderId=241989;A_SubgroupId=1745595622;A_BASIC_TYPE=;A_INFO=202504250840019538.pcl.csv;A_INFO2=5;A_JOBID=HGCV2;A_MES_ENTITY=HGCV2;A_MID=46-667776-5159;A_NULL_DATA=;A_PPID=NO_PPID;A_PROCESS_JOBID=;A_PRODUCT=;A_SEQUENCE=638811672019538124;A_WAFER_ID=;A_WAFER_POS=;
LOGISTICS_2 B_HeaderId=241989;B_SubgroupId=1745595622;B_BASIC_TYPE=- EpiPro 5000;B_INFO=-;B_INFO2=;B_JOBID=;B_MES_ENTITY=;B_MID=667776;B_NULL_DATA=;B_PPID=6_5PT10M.PAT;B_PROCESS_JOBID=46;B_PRODUCT=5159;B_SEQUENCE=638811672019538124;B_WAFER_ID=-;B_WAFER_POS=-;
EOF
HEADER_TAG|HEADER_VALUE
FORMAT|2.00
NUMBER_PASSES|0001
HEADER_OFFSET|000004856
DATA_OFFSET|000000128
END_OFFSET|000005521
|Time|A_LOGISTICS|B_LOGISTICS|Count|Sequence|MesEntity|Index|Operator|StartVoltage|Wafer|StopVoltage|Lot|RampRate|Plan|GLimit|Date|Time|SetupFile|WaferSize|Folder|Ccomp|Pattern|Area|CondType|RhoMethod|Model|MeanNAvg|MeanNsl|MeanVd|MeanFlatZ|MeanRhoAvg|MeanRhosl|MeanPhase|MeanGrade|MeanRs|StandardDeviationPercentageNAvg|StandardDeviationPercentageNsl|StandardDeviationPercentageVd|StandardDeviationPercentageFlatZ|StandardDeviationPercentageRhoAvg|StandardDeviationPercentageRhosl|StandardDeviationPercentagePhase|StandardDeviationPercentageGrade|StandardDeviationPercentageRs|RadialGradientNAvg|RadialGradientNsl|RadialGradientVd|RadialGradientFlatZ|RadialGradientRhoAvg|RadialGradientRhosl|RadialGradientPhase|RadialGradientGrade|RadialGradientRs|Site|X|Y|NAvg|RhoAvg|Nsl|Rhosl|Vd|Phase|FlatZ|Grade|XLeft|XRight|BottomY|TopY|RDS|PSN|Reactor|Layer|Zone|Employee|InferredLot|Nine10mmEdgeMean|Nine4mmEdgeMean|NineCriticalPointsAverage|NineCriticalPointsPhaseAngleAverage|NineCriticalPointsStdDev|NineEdgeMeanDelta|NineMean|NineResRangePercent|AreaDeltaFromLastRun|Variation|Percentage HgCV 4PP Delta|RhoAvg01|RhoAvg02|RhoAvg03|RhoAvg04|RhoAvg05|RhoAvg06|RhoAvg07|RhoAvg08|RhoAvg09|EventId|
|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|
0.00|1|2|5|638811672019538124|HGCV2|0|PROBE 2|-5.00|ZONE2|-20.00|667776|2500|5PT MES|2000.00|4/25/2025 8:40:01 AM|11:57:16 AM|6IN5PT|150.00|SSMDATA|1.02|6_5PT10M.PAT|2.130E-002|N|ASTM: F723 - 82|PARALLEL|7.599e+013|7.634e+013|3.342e-001|1.713e+001|5.632e+001|5.607e+001|9.000e+001|2.251e+000|-1.000e+000|2.352e+000|2.352e+000|4.365e+001|2.053e+000|2.315e+000|2.321e+000|-1.000e+000|2.931e+001|-1.000e+000|2.799e+000|2.766e+000|4.605e+001|2.563e+000|2.779e+000|2.746e+000|0.000e+000|3.713e+001|0.000e+000|1|0.0|0.0|7.854E+013|54.482|7.882E+013|54.286|0.294|90.000|17.109|2.193|9.00E+000|1.80E+001|13|14|667776|5159|46|-|-||46-667776-5159||||||||||||54.482|||||||||23
0.00|1|2|5|638811672019538124|HGCV2|1|PROBE 2|-5.00|ZONE2|-20.00|667776|2500|5PT MES|2000.00|4/25/2025 8:40:01 AM|11:57:16 AM|6IN5PT|150.00|SSMDATA|1.02|6_5PT10M.PAT|2.130E-002|N|ASTM: F723 - 82|PARALLEL|7.599e+013|7.634e+013|3.342e-001|1.713e+001|5.632e+001|5.607e+001|9.000e+001|2.251e+000|-1.000e+000|2.352e+000|2.352e+000|4.365e+001|2.053e+000|2.315e+000|2.321e+000|-1.000e+000|2.931e+001|-1.000e+000|2.799e+000|2.766e+000|4.605e+001|2.563e+000|2.779e+000|2.746e+000|0.000e+000|3.713e+001|0.000e+000|2|56.3|32.5|7.447E+013|57.431|7.472E+013|57.247|0.216|90.000|17.428|1.898|9.00E+000|1.80E+001|13|14|667776|5159|46|-|-||46-667776-5159|||||||||||||57.431||||||||23
0.00|1|2|5|638811672019538124|HGCV2|2|PROBE 2|-5.00|ZONE2|-20.00|667776|2500|5PT MES|2000.00|4/25/2025 8:40:01 AM|11:57:16 AM|6IN5PT|150.00|SSMDATA|1.02|6_5PT10M.PAT|2.130E-002|N|ASTM: F723 - 82|PARALLEL|7.599e+013|7.634e+013|3.342e-001|1.713e+001|5.632e+001|5.607e+001|9.000e+001|2.251e+000|-1.000e+000|2.352e+000|2.352e+000|4.365e+001|2.053e+000|2.315e+000|2.321e+000|-1.000e+000|2.931e+001|-1.000e+000|2.799e+000|2.766e+000|4.605e+001|2.563e+000|2.779e+000|2.746e+000|0.000e+000|3.713e+001|0.000e+000|3|-32.5|56.3|7.426E+013|57.596|7.458E+013|57.352|0.250|90.000|17.496|2.414|9.00E+000|1.80E+001|13|14|667776|5159|46|-|-||46-667776-5159||||||||||||||57.596|||||||23
0.00|1|2|5|638811672019538124|HGCV2|3|PROBE 2|-5.00|ZONE2|-20.00|667776|2500|5PT MES|2000.00|4/25/2025 8:40:01 AM|11:57:16 AM|6IN5PT|150.00|SSMDATA|1.02|6_5PT10M.PAT|2.130E-002|N|ASTM: F723 - 82|PARALLEL|7.599e+013|7.634e+013|3.342e-001|1.713e+001|5.632e+001|5.607e+001|9.000e+001|2.251e+000|-1.000e+000|2.352e+000|2.352e+000|4.365e+001|2.053e+000|2.315e+000|2.321e+000|-1.000e+000|2.931e+001|-1.000e+000|2.799e+000|2.766e+000|4.605e+001|2.563e+000|2.779e+000|2.746e+000|0.000e+000|3.713e+001|0.000e+000|4|-56.3|-32.5|7.695E+013|55.595|7.733E+013|55.324|0.327|90.000|16.621|1.493|9.00E+000|1.80E+001|13|14|667776|5159|46|-|-||46-667776-5159|||||||||||||||55.595||||||23
0.00|1|2|5|638811672019538124|HGCV2|4|PROBE 2|-5.00|ZONE2|-20.00|667776|2500|5PT MES|2000.00|4/25/2025 8:40:01 AM|11:57:16 AM|6IN5PT|150.00|SSMDATA|1.02|6_5PT10M.PAT|2.130E-002|N|ASTM: F723 - 82|PARALLEL|7.599e+013|7.634e+013|3.342e-001|1.713e+001|5.632e+001|5.607e+001|9.000e+001|2.251e+000|-1.000e+000|2.352e+000|2.352e+000|4.365e+001|2.053e+000|2.315e+000|2.321e+000|-1.000e+000|2.931e+001|-1.000e+000|2.799e+000|2.766e+000|4.605e+001|2.563e+000|2.779e+000|2.746e+000|0.000e+000|3.713e+001|0.000e+000|5|32.5|-56.3|7.571E+013|56.500|7.623E+013|56.121|0.584|90.000|17.015|3.257|9.00E+000|1.80E+001|13|14|667776|5159|46|-|-||46-667776-5159||||||||||||||||56.500|||||23
NUM_DATA_ROWS|000000005
NUM_DATA_COLUMNS|000000096
DELIMITER|;
START_TIME_FORMAT|MM/dd/yyyy HH:mm:ss
START_TIME|04/25/2025 08:40:01
LOGISTICS_COLUMN|A_LOGISTICS
LOGISTICS_COLUMN|B_LOGISTICS
LOGISTICS_1|A_BASIC_TYPE=;A_INFO=202504250840019538.pcl.csv;A_INFO2=5;A_JOBID=HGCV2;A_MES_ENTITY=HGCV2;A_MID=46-667776-5159;A_NULL_DATA=;A_PPID=NO_PPID;A_PROCESS_JOBID=;A_PRODUCT=;A_SEQUENCE=638811672019538124;A_WAFER_ID=;A_WAFER_POS=;
LOGISTICS_2|B_BASIC_TYPE=- EpiPro 5000;B_INFO=-;B_INFO2=;B_JOBID=;B_MES_ENTITY=;B_MID=667776;B_NULL_DATA=;B_PPID=6_5PT10M.PAT;B_PROCESS_JOBID=46;B_PRODUCT=5159;B_SEQUENCE=638811672019538124;B_WAFER_ID=-;B_WAFER_POS=-;
END_HEADER

3383
.vscode/METROLOGY_SERVICES.vba vendored Normal file

File diff suppressed because it is too large Load Diff

6
.vscode/settings.json vendored Normal file
View File

@ -0,0 +1,6 @@
{
"files.associations": {
"*.txt": "vba"
},
"cSpell.words": []
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -423,7 +423,7 @@
"<1,31>": "", "<1,31>": "",
"<1,32>": "", "<1,32>": "",
"<1,33>": "", "<1,33>": "",
"<1,34>": "LSL2*IMAGE*ICO*INFINEON", "<1,34>": "",
"<1,35>": "", "<1,35>": "",
"<1,36>": "", "<1,36>": "",
"<1,37>": { "<1,37>": {

View File

@ -40,7 +40,7 @@
"<8,2>": { "<8,2>": {
"<8,2,1>": "MET", "<8,2,1>": "MET",
"<8,2,2>": "Metrology", "<8,2,2>": "Metrology",
"<8,2,3>": "TODD_C, JEANNE_M, JFUENTE1, JUSTIN_H, JONATHON_S, MARROQUINBRA, TIFFANY_M" "<8,2,3>": "TODD_C, JEANNE_M"
}, },
"<8,3>": { "<8,3>": {
"<8,3,1>": "MTC", "<8,3,1>": "MTC",

View File

@ -235,7 +235,7 @@ Service SendReminders()
IF CLType = 'E' THEN IF CLType = 'E' THEN
Desc = CLRec<CALIB_LIST_EQ_DESC$> Desc = CLRec<CALIB_LIST_EQ_DESC$>
SN = CLRec<CALIB_LIST_EQ_SN$> SN = CLRec<CALIB_LIST_EQ_SN$>
Loc = CLRec<CALIB_LIST_EQ_LOC$> Loc = CLRec<CALIB_LIST_EQ_LOC$
NewLine = Desc:' (S/N: ':SN:') located in the ':Loc:' is due for calibration on ':NextCalDt:CRLF$ NewLine = Desc:' (S/N: ':SN:') located in the ':Loc:' is due for calibration on ':NextCalDt:CRLF$
END END
IF CLType = 'S' THEN IF CLType = 'S' THEN

View File

@ -51,11 +51,11 @@ RETURN Result
Create: Create:
* * * * * * * * * * * * * *
obj_AppWindow('Create') obj_AppWindow('Create')
Set_Property(@WINDOW,'STATUSLINE',@WINDOW:'.STATUSLINE_FIX') Set_Property(@WINDOW,'STATUSLINE',@WINDOW:'.STATUSLINE_FIX')
GOSUB Refresh GOSUB Refresh
RETURN RETURN
@ -77,58 +77,61 @@ ReactNoGF:
LUReactor: LUReactor:
* * * * * * * * * * * * * *
IF NOT(ASSIGNED(Parm1)) THEN FocusControl = '' ELSE FocusControl = Parm1 IF NOT(ASSIGNED(Parm1)) THEN FocusControl = '' ELSE FocusControl = Parm1
IF NOT(ASSIGNED(Parm2)) THEN FocusPos = '' ELSE FocusPos = Parm2 IF NOT(ASSIGNED(Parm2)) THEN FocusPos = '' ELSE FocusPos = Parm2
Set_Status(0) Set_Status(0)
TypeOver = '' TypeOver = ''
TypeOver<PSELECT$> = '2' ;* Multiple Select TypeOver<PSELECT$> = '2' ;* Multiple Select
TypeOver<PTYPE$> = 'E' ;* Return entire row TypeOver<PTYPE$> = 'E' ;* Return entire row
ReactData = Popup(@WINDOW,TypeOver,'REACTORS') ReactData = Popup(@WINDOW,TypeOver,'REACTORS')
IF ReactData = '' THEN RETURN IF ReactData = '' THEN RETURN
Set_Property(@WINDOW:'.REACT_NO','LIST',ReactData) Set_Property(@WINDOW:'.REACT_NO','LIST',ReactData)
LineCnt = COUNT(ReactData,@FM) + (ReactData NE '') LineCnt = COUNT(ReactData,@FM) + (ReactData NE '')
ColCnt = 7 ColCnt = 7
FOR Line = 1 TO LineCnt FOR Line = 1 TO LineCnt
FOR Column = 2 TO ColCnt FOR Column = 2 TO ColCnt
stat = Send_Message(@WINDOW:'.REACT_NO','COLOR_BY_POS',Column,Line,GREEN$) stat = Send_Message(@WINDOW:'.REACT_NO','COLOR_BY_POS',Column,Line,GREEN$)
NEXT Column NEXT Column
NEXT Line NEXT Line
RETURN RETURN
* * * * * * * * * * * * * *
Cancel: Cancel:
* * * * * * * * * * * * * *
End_Dialog(@WINDOW,'') End_Dialog(@WINDOW,'')
RETURN RETURN
* * * * * * * * * * * * * *
PostEntries: PostEntries:
* * * * * * * * * * * * * *
ReactNos = Get_Property(@WINDOW:'.REACT_NO','ARRAY')<COL$REACT_NO> ReactNos = Get_Property(@WINDOW:'.REACT_NO','ARRAY')<COL$REACT_NO>
Comment = Get_Property(@WINDOW:'.COMMENT','DEFPROP') Comment = Get_Property(@WINDOW:'.COMMENT','DEFPROP')
LOOP LOOP
TestChar = ReactNos[-1,1] TestChar = ReactNos[-1,1]
UNTIL TestChar NE @VM OR ReactNos = '' UNTIL TestChar NE @VM OR ReactNos = ''
ReactNos[-1,1] = '' ReactNos[-1,1] = ''
REPEAT REPEAT
EventKeys = '' ;* Keys to return to the REACT_EVENT window for a browse of the newly created records EventKeys = '' ;* Keys to return to the REACT_EVENT window for a browse of the newly created records
IF ReactNos NE '' AND Comment NE '' THEN IF ReactNos NE '' AND Comment NE '' THEN
EventDTM = OCONV(Date(),'D4/'):' ':OCONV(Time(),'MTS') ;* Same DTM for all new records EventDTM = OCONV(Date(),'D4/'):' ':OCONV(Time(),'MTS') ;* Same DTM for all new records
EventType = 'PD' ;* Passdown EventType = 'PD' ;* Passdown
@ -141,21 +144,15 @@ PostEntries:
CurrMode = XLATE('REACTOR',ReactNo,'CURR_MODE','X') CurrMode = XLATE('REACTOR',ReactNo,'CURR_MODE','X')
obj_React_Event('Create',ReactNo:@RM:EventDTM:@RM:EventType:@RM:LoggedBy:@RM:Comment:@RM:@RM:CurrMode) obj_React_Event('Create',ReactNo:@RM:EventDTM:@RM:EventType:@RM:LoggedBy:@RM:Comment:@RM:@RM:CurrMode)
ErrCode = ''
If Get_Status(ErrCode) then
Msg(@Window, '', 'OK', '', 'Process Error':@FM:'Error posting entries. ':ErrCode)
end else
Set_Property(@Window:'.REACT_NO', 'LIST', '')
Set_Property(@Window:'.COMMENT', 'TEXT', '')
end
EventKeys<I> = ReactNo:'*':ICONV(EventDTM,'DT') EventKeys<I> = ReactNo:'*':ICONV(EventDTM,'DT')
NEXT I NEXT I
END else END
Msg(@Window, '', 'OK', '', 'Process Error':@FM:'React No(s) and Comment must not be null!')
end End_Dialog(@WINDOW,EventKeys)
RETURN RETURN

View File

@ -582,6 +582,10 @@ Refresh:
If @WINDOW EQ 'RDS_UNLOAD' then If @WINDOW EQ 'RDS_UNLOAD' then
DevelopmentFlag = Xlate('DEVELOPMENT', 'HGCV', 'STATUS', 'X')
If (DevelopmentFlag EQ True$) then
CtrlName = @WINDOW:'.EDT_QA_MET' CtrlName = @WINDOW:'.EDT_QA_MET'
Set_Property(@Window : '.MET_TEST', 'VISIBLE', False$) Set_Property(@Window : '.MET_TEST', 'VISIBLE', False$)
Set_Property(CtrlName, 'VISIBLE', True$) Set_Property(CtrlName, 'VISIBLE', True$)
@ -705,6 +709,42 @@ Refresh:
END ELSE END ELSE
Set_Property(@WINDOW:'.CLEAR_EPI_UNLOAD','VISIBLE',0) Set_Property(@WINDOW:'.CLEAR_EPI_UNLOAD','VISIBLE',0)
END END
end else
CtrlName = @WINDOW:'.MET_TEST'
Set_Property(@Window : '.EDT_QA_MET', 'VISIBLE', False$)
Set_Property(CtrlName, 'VISIBLE', True$)
MetList = Get_Property(CtrlName,'LIST')
MLCnt = COUNT(MetList,@FM) + (MetList NE '')
FOR Line = 1 TO MLCnt
IF MetList<Line,COL$MET_TEST> NE '' THEN
BEGIN CASE
CASE MetList<Line,COL$MET_RESULT> = ''
Color = YELLOW$
CASE MetList<Line,COL$MET_RESULT> < MetList<Line,COL$MET_MIN> OR MetList<Line,COL$MET_RESULT> > MetList<Line,COL$MET_MAX>
Color = RED$
CASE 1
Color = GREEN$
END CASE
END ELSE
Color = GREEN$
END;* End of check for Met Test on the current line
stat = Send_Message(CtrlName,'COLOR_BY_POS',0,Line,Color)
NEXT Line
Set_Property(@WINDOW:'.BUTTON_11','ENABLED',EnableUnloadButton)
IF MemberOf(@USER4, 'OI_ADMIN') THEN
Set_Property(@WINDOW:'.CLEAR_EPI_UNLOAD','VISIBLE',1)
END ELSE
Set_Property(@WINDOW:'.CLEAR_EPI_UNLOAD','VISIBLE',0)
END
end
end end
* End of check for Unload OR Post_Epi windows * End of check for Unload OR Post_Epi windows
@ -2629,8 +2669,9 @@ MetTestDC:
Lines = Get_Property(@WINDOW:'.MET_TEST', 'LIST') Lines = Get_Property(@WINDOW:'.MET_TEST', 'LIST')
TestLine = Lines<CurrRow> TestLine = Lines<CurrRow>
LWRHOTest = Indexc(TestLine, 'LW_RHO', 1) LWRHOTest = Indexc(TestLine, 'LW_RHO', 1)
DevelopmentFlag = Xlate('DEVELOPMENT', 'HGCV', 'STATUS', 'X')
If (@Window EQ 'RDS_UNLOAD') and (LWRHOTest EQ False$) then If (DevelopmentFlag EQ True$) and (@Window EQ 'RDS_UNLOAD') and (LWRHOTest EQ False$) then
Ctrls := @WINDOW:'.EDT_QA_MET':@RM ; Props := 'SELPOS':@RM Ctrls := @WINDOW:'.EDT_QA_MET':@RM ; Props := 'SELPOS':@RM
Ctrls := @WINDOW:'.EDT_QA_MET' ; Props := 'LIST' Ctrls := @WINDOW:'.EDT_QA_MET' ; Props := 'LIST'
end else end else
@ -2667,7 +2708,8 @@ MetTestDC:
BEGIN CASE BEGIN CASE
CASE MetTest EQ '' CASE MetTest EQ ''
Null Null
CASE (@WINDOW = 'RDS_UNLOAD') and (LWRHOTest EQ False$)
CASE (@WINDOW = 'RDS_UNLOAD') and (DevelopmentFlag EQ True$) and (LWRHOTest EQ False$)
ReturnVal = Dialog_Box('NDW_QA_MET_RESULT', @WINDOW, CassID) ReturnVal = Dialog_Box('NDW_QA_MET_RESULT', @WINDOW, CassID)
Send_Event(@Window, "READ") Send_Event(@Window, "READ")
CASE Otherwise$ CASE Otherwise$
@ -2821,6 +2863,9 @@ return
RefreshWaferCounterData: RefreshWaferCounterData:
WCCheckEnabled = Xlate('APP_INFO', 'WAFER_COUNTER_CHECK', '', 'X')
If WCCheckEnabled then
Set_Property(@Window:'.LBL_WAFER_COUNTER_QTY', 'VISIBLE', True$) Set_Property(@Window:'.LBL_WAFER_COUNTER_QTY', 'VISIBLE', True$)
Set_Property(@Window:'.EDL_WAFER_COUNTER_QTY', 'VISIBLE', True$) Set_Property(@Window:'.EDL_WAFER_COUNTER_QTY', 'VISIBLE', True$)
QtyBackColor = GREEN$ QtyBackColor = GREEN$
@ -2863,5 +2908,12 @@ RefreshWaferCounterData:
end end
Set_Property(@WINDOW:'.EDL_WAFER_COUNTER_QTY','BACKCOLOR', QtyBackColor) Set_Property(@WINDOW:'.EDL_WAFER_COUNTER_QTY','BACKCOLOR', QtyBackColor)
end else
Set_Property(@Window:'.EDL_WAFER_COUNTER_QTY', 'VISIBLE', False$)
Set_Property(@Window:'.LBL_WAFER_COUNTER_QTY', 'VISIBLE', False$)
end
return return

View File

@ -1107,6 +1107,9 @@ SignSupVer:
END END
END END
WCCheckEnabled = Xlate('APP_INFO', 'WAFER_COUNTER_CHECK', '', 'X')
If WCCheckEnabled then
**************************************** ****************************************
* Verify the Wafer Counter information * * Verify the Wafer Counter information *
**************************************** ****************************************
@ -1126,6 +1129,7 @@ SignSupVer:
ErrMsg('Unable to sign FQA because the Wafer Counter quantity is missing.') ErrMsg('Unable to sign FQA because the Wafer Counter quantity is missing.')
RETURN 0 RETURN 0
end end
end
************************** **************************
* Verify user's password * * Verify user's password *
@ -2290,6 +2294,9 @@ return
RefreshWaferCounterData: RefreshWaferCounterData:
WCCheckEnabled = Xlate('APP_INFO', 'WAFER_COUNTER_CHECK', '', 'X')
If WCCheckEnabled then
Set_Property(@Window:'.LBL_WAFER_COUNTER_QTY', 'VISIBLE', True$) Set_Property(@Window:'.LBL_WAFER_COUNTER_QTY', 'VISIBLE', True$)
Set_Property(@Window:'.EDL_WAFER_COUNTER_QTY', 'VISIBLE', True$) Set_Property(@Window:'.EDL_WAFER_COUNTER_QTY', 'VISIBLE', True$)
QtyBackColor = GREEN$ QtyBackColor = GREEN$
@ -2334,5 +2341,10 @@ RefreshWaferCounterData:
Set_Property(@WINDOW:'.EDL_WAFER_COUNTER_QTY','BACKCOLOR', QtyBackColor) Set_Property(@WINDOW:'.EDL_WAFER_COUNTER_QTY','BACKCOLOR', QtyBackColor)
end else
Set_Property(@Window:'.LBL_WAFER_COUNTER_QTY', 'VISIBLE', False$)
Set_Property(@Window:'.EDL_WAFER_COUNTER_QTY', 'VISIBLE', False$)
end
return return

View File

@ -881,6 +881,10 @@ Event SIGN_BUTTON.CLICK()
****************************************** ******************************************
* Verify Unload Stage QA Metrology Tests * * Verify Unload Stage QA Metrology Tests *
****************************************** ******************************************
DevelopmentFlag = Xlate('DEVELOPMENT', 'HGCV', 'STATUS', 'X')
If (DevelopmentFlag EQ True$) then
WOMatQAKey = WONo : '*' : CassNo WOMatQAKey = WONo : '*' : CassNo
WOMatQARec = Database_Services('ReadDataRow', 'WO_MAT_QA', WOMatQAKey) WOMatQARec = Database_Services('ReadDataRow', 'WO_MAT_QA', WOMatQAKey)
OutOfSpec = WOMatQARec<WO_MAT_QA_OUT_OF_SPEC$> OutOfSpec = WOMatQARec<WO_MAT_QA_OUT_OF_SPEC$>
@ -894,6 +898,7 @@ Event SIGN_BUTTON.CLICK()
ErrMsg(ErrorMsg) ErrMsg(ErrorMsg)
Return Return
end end
end
******************************************* *******************************************
* Verify if all steps have been completed * * Verify if all steps have been completed *
@ -1960,3 +1965,7 @@ ClearForm:
return return

View File

@ -259,7 +259,7 @@ end service
//---------------------------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------------------------
Service GetWaferMapProductionPath() Service GetWaferMapProductionPath()
ProductionPath = '\\mesfs.infineon.com\EC_Metrology_Si\MetrologyAttachments\TencorRunData_' ProductionPath = '\\mesfs.infineon.com\EC_Metrology_Si\MetrologyAttachments\TencorRunData'
Response = ProductionPath Response = ProductionPath
end service end service

View File

@ -2,9 +2,9 @@ Compile function Lot_Services(@Service, @Params)
#pragma precomp SRP_PreCompiler #pragma precomp SRP_PreCompiler
Declare function TEST_WAFER_PROD_SERVICES, SRP_Datetime, Datetime, Database_Services, Lot_Services, Error_Services, RTI_CREATEGUID Declare function TEST_WAFER_PROD_SERVICES, SRP_Datetime, Datetime, Database_Services, Lot_Services, Error_Services, RTI_CREATEGUID
Declare function SRP_Array, SRP_Json, Environment_Services, Logging_Services, MemberOf, Lot_Event_Services, GetTickCount Declare function SRP_Array, SRP_Json, Environment_Services, Logging_Services, MemberOf, Lot_Event_Services
Declare subroutine Database_Services, Btree.Extract, Lot_Services, Error_Services, Labeling_Services, SRP_Json, Logging_Services Declare subroutine Database_Services, Btree.Extract, Lot_Services, Error_Services, Labeling_Services, SRP_Json, Logging_Services
Declare subroutine SRP_Run_Command, Service_Services, obj_notes, Lot_Event_Services, Mona_Services Declare subroutine SRP_Run_Command, Service_Services, obj_notes, Lot_Event_Services
$insert APP_INSERTS $insert APP_INSERTS
$Insert LOT_EQUATES $Insert LOT_EQUATES
$Insert TEST_WAFER_PROD_EQUATES $Insert TEST_WAFER_PROD_EQUATES
@ -38,13 +38,6 @@ objLotClosureLog = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, ',',
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 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', 'WO_MAT', 'LOT' Options LOT_TYPES = 'TW', 'RDS', 'WM_OUT', 'WM_IN', 'WO_MAT', 'LOT'
IsProd = Environment_Services('IsProd')
If IsProd EQ True$ then
MonaResource = 'GRP_OPENINSIGHT_MES_OP_FE_LOTSERVICES'
end else
MonaResource = 'GRP_OPENINSIGHT_MES_OP_FE_DEV_LOTSERVICES'
end
GoToService GoToService
Return Response or "" Return Response or ""
@ -120,9 +113,6 @@ Service GenerateNewLotId(LotType)
end service end service
Service GetLotIdByLegacyLotIdAndType(LegacyLotId, LegacyLotType) Service GetLotIdByLegacyLotIdAndType(LegacyLotId, LegacyLotType)
StartTick = GetTickCount()
MetricName = 'GetLotIdByLegacyLotIdAndType'
Open 'DICT.LOT' to DictLot then Open 'DICT.LOT' to DictLot then
SearchString = '' SearchString = ''
@ -140,16 +130,10 @@ Service GetLotIdByLegacyLotIdAndType(LegacyLotId, LegacyLotType)
end else end else
ErrorMsg = 'Error in ':Service:' service. Error opening LOT dictionary.' ErrorMsg = 'Error in ':Service:' service. Error opening LOT dictionary.'
end end
EndTick = GetTickCount()
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
end service end service
Service CreateNewLot(LotType, ProdName, LotQty, VendorPartNo, VendorLotNo, VendorCode, Username, PrinterID, LotId) Service CreateNewLot(LotType, ProdName, LotQty, VendorPartNo, VendorLotNo, VendorCode, Username, PrinterID, LotId)
StartTick = GetTickCount()
MetricName = 'CreateNewLot'
CreatedLotNumber = '' CreatedLotNumber = ''
ErrorMessage = '' ErrorMessage = ''
Begin Case Begin Case
@ -295,8 +279,6 @@ Service CreateNewLot(LotType, ProdName, LotQty, VendorPartNo, VendorLotNo, Vendo
end end
Response = CreatedLotNumber Response = CreatedLotNumber
EndTick = GetTickCount()
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
End Service End Service
@ -502,9 +484,6 @@ end service
//Returns a @FM delimited list of operations in sequence //Returns a @FM delimited list of operations in sequence
Service GetLotOperationSequence(LotId) Service GetLotOperationSequence(LotId)
StartTick = GetTickCount()
MetricName = 'GetLotOperationSequence'
LotOperationsInSequence = '' LotOperationsInSequence = ''
If LotID NE '' then If LotID NE '' then
//Get Operations //Get Operations
@ -517,15 +496,9 @@ Service GetLotOperationSequence(LotId)
//error: lot id was null //error: lot id was null
end end
Response = LotOperationsInSequence Response = LotOperationsInSequence
EndTick = GetTickCount()
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
end service end service
Service GetLotCurrOperationId(LotId) Service GetLotCurrOperationId(LotId)
StartTick = GetTickCount()
MetricName = 'GetLotCurrOperationId'
CurrOperation = '' CurrOperation = ''
If LotID NE '' then If LotID NE '' then
//Get them in sequence first //Get them in sequence first
@ -542,15 +515,9 @@ Service GetLotCurrOperationId(LotId)
//error: lot id was null //error: lot id was null
end end
Response = CurrOperation Response = CurrOperation
EndTick = GetTickCount()
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
end service end service
Service GetLotCurrOperationName(LotId) Service GetLotCurrOperationName(LotId)
StartTick = GetTickCount()
MetricName = 'GetLotCurrOperationName'
CurrOperationId = '' CurrOperationId = ''
CurrOperationName = '' CurrOperationName = ''
If LotID NE '' then If LotID NE '' then
@ -569,9 +536,6 @@ Service GetLotCurrOperationName(LotId)
//error: lot id was null //error: lot id was null
end end
Response = CurrOperationName Response = CurrOperationName
EndTick = GetTickCount()
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
end service end service
Service AddLotOperationIntoSequence(LotId, NewOperationId, NewSequence, Rework) Service AddLotOperationIntoSequence(LotId, NewOperationId, NewSequence, Rework)
@ -627,9 +591,6 @@ Service AddLotOperationIntoSequence(LotId, NewOperationId, NewSequence, Rework)
end service end service
Service IsLotMovedIn(LotId) Service IsLotMovedIn(LotId)
StartTick = GetTickCount()
MetricName = 'IsLotMovedIn'
Response = '' Response = ''
If RowExists('LOT', LotId) then If RowExists('LOT', LotId) then
CurrOperId = Lot_Services('GetLotCurrOperationId', LotId) CurrOperId = Lot_Services('GetLotCurrOperationId', LotId)
@ -640,9 +601,6 @@ Service IsLotMovedIn(LotId)
Response = False$ Response = False$
end end
end end
EndTick = GetTickCount()
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
end service end service
Service IsOperationCompleted(LotOperationId) Service IsOperationCompleted(LotOperationId)
@ -661,8 +619,6 @@ Service IsOperationCompleted(LotOperationId)
end service end service
Service MoveInLot(LotID, Operator) Service MoveInLot(LotID, Operator)
StartTick = GetTickCount()
MetricName = 'MoveInLot'
ErrorMessage = '' ErrorMessage = ''
ThisLotCurrOperationID = '' ThisLotCurrOperationID = ''
@ -711,15 +667,9 @@ Service MoveInLot(LotID, Operator)
Logging_Services('AppendLog', objLotMoveLog, LogData, @RM, @FM, False$) Logging_Services('AppendLog', objLotMoveLog, LogData, @RM, @FM, False$)
Error_Services('Add', ErrorMessage) Error_Services('Add', ErrorMessage)
end end
EndTick = GetTickCount()
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
end service end service
Service MoveOutLot(LotID, Operator) Service MoveOutLot(LotID, Operator)
StartTick = GetTickCount()
MetricName = 'MoveOutLot'
ErrorMessage = '' ErrorMessage = ''
ThisLotCurrOperationID = '' ThisLotCurrOperationID = ''
If LotId NE '' then If LotId NE '' then
@ -779,9 +729,6 @@ Service MoveOutLot(LotID, Operator)
Logging_Services('AppendLog', objLotMoveLog, LogData, @RM, @FM, False$) Logging_Services('AppendLog', objLotMoveLog, LogData, @RM, @FM, False$)
Error_Services('Add', ErrorMessage) Error_Services('Add', ErrorMessage)
end end
EndTick = GetTickCount()
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
end service end service
Service ConvertLotRecordToJson(LotId, ItemURL, CurrUser, FullObject=BOOLEAN) Service ConvertLotRecordToJson(LotId, ItemURL, CurrUser, FullObject=BOOLEAN)
@ -908,9 +855,6 @@ Service ConvertLotRecordToJson(LotId, ItemURL, CurrUser, FullObject=BOOLEAN)
end service end service
Service OpenLot(LotId) Service OpenLot(LotId)
StartTick = GetTickCount()
MetricName = 'OpenLot'
ErrorMessage = '' ErrorMessage = ''
If RowExists('LOT', LotId) then If RowExists('LOT', LotId) then
LotRec = Database_Services('ReadDataRow', 'LOT', LotId, True$, 0, False$) LotRec = Database_Services('ReadDataRow', 'LOT', LotId, True$, 0, False$)
@ -927,15 +871,9 @@ Service OpenLot(LotId)
If ErrorMessage NE '' then If ErrorMessage NE '' then
Error_Services('Add', ErrorMessage) Error_Services('Add', ErrorMessage)
end end
EndTick = GetTickCount()
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
end service end service
Service CloseLot(LotId) Service CloseLot(LotId)
StartTick = GetTickCount()
MetricName = 'CloseLot'
ErrorMessage = '' ErrorMessage = ''
If RowExists('LOT', LotId) then If RowExists('LOT', LotId) then
LotRec = Database_Services('ReadDataRow', 'LOT', LotId, True$, 0, False$) LotRec = Database_Services('ReadDataRow', 'LOT', LotId, True$, 0, False$)
@ -952,9 +890,6 @@ Service CloseLot(LotId)
If ErrorMessage NE '' then If ErrorMessage NE '' then
Error_Services('Add', ErrorMessage) Error_Services('Add', ErrorMessage)
end end
EndTick = GetTickCount()
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
end service end service
Service AutoCloseTestWaferLot(LotId, CloseUserId) Service AutoCloseTestWaferLot(LotId, CloseUserId)
@ -1054,26 +989,15 @@ Service AutoCloseTestWaferLot(LotId, CloseUserId)
end service end service
Service HoldLot(LotId, OperatorId) Service HoldLot(LotId, OperatorId)
StartTick = GetTickCount()
MetricName = 'HoldLot'
EndTick = GetTickCount()
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
end service end service
Service UnholdLot(LotId, OperatorId) Service UnholdLot(LotId, OperatorId)
StartTick = GetTickCount()
MetricName = 'UnholdLot'
EndTick = GetTickCount()
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
end service end service
Service ReduceLotWaferCount(LotId, ReductionQty, OperatorId) Service ReduceLotWaferCount(LotId, ReductionQty, OperatorId)
StartTick = GetTickCount()
MetricName = 'ReduceLotWaferCount'
ErrorMessage = '' ErrorMessage = ''
If RowExists('LOT', LotId) then If RowExists('LOT', LotId) then
LotRec = Database_Services('ReadDataRow', 'LOT', LotId, True$, 0, False$) LotRec = Database_Services('ReadDataRow', 'LOT', LotId, True$, 0, False$)
@ -1119,15 +1043,9 @@ Service ReduceLotWaferCount(LotId, ReductionQty, OperatorId)
if ErrorMessage NE '' then if ErrorMessage NE '' then
Error_Services('Add', ErrorMessage) Error_Services('Add', ErrorMessage)
end end
EndTick = GetTickCount()
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
end service end service
Service IncreaseLotWaferCount(LotId, IncreaseQty, OperatorId) Service IncreaseLotWaferCount(LotId, IncreaseQty, OperatorId)
StartTick = GetTickCount()
MetricName = 'IncreaseLotWaferCount'
ErrorMessage = '' ErrorMessage = ''
If RowExists('LOT', LotId) then If RowExists('LOT', LotId) then
LotRec = Database_Services('ReadDataRow', 'LOT', LotId, True$, 0, False$) LotRec = Database_Services('ReadDataRow', 'LOT', LotId, True$, 0, False$)
@ -1169,8 +1087,6 @@ Service IncreaseLotWaferCount(LotId, IncreaseQty, OperatorId)
Error_Services('Add', ErrorMessage) Error_Services('Add', ErrorMessage)
end end
EndTick = GetTickCount()
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
end service end service
Service OpenOIWizardCreateTWLotInBrowser() Service OpenOIWizardCreateTWLotInBrowser()
@ -1179,9 +1095,6 @@ Service OpenOIWizardCreateTWLotInBrowser()
end service end service
Service CreateNewVoidedLotRecord(LotId, LegacyLotId, LotType=LOT_TYPES, Username) Service CreateNewVoidedLotRecord(LotId, LegacyLotId, LotType=LOT_TYPES, Username)
StartTick = GetTickCount()
MetricName = 'CreateNewVoidedLotRecord'
ErrorMessage = '' ErrorMessage = ''
If RowExists('LSL_USERS', Username) then If RowExists('LSL_USERS', Username) then
If LotType NE '' then If LotType NE '' then
@ -1252,8 +1165,16 @@ Service CreateNewVoidedLotRecord(LotId, LegacyLotId, LotType=LOT_TYPES, Username
If ErrorMessage NE '' then If ErrorMessage NE '' then
//Todo Log Error Message //Todo Log Error Message
end end
EndTick = GetTickCount()
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
end service end service

View File

@ -388,7 +388,6 @@ end service
// Looks for available Metrology files that are ready to be imported into the MES system. // Looks for available Metrology files that are ready to be imported into the MES system.
//---------------------------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------------------------
Service ImportMetrologyFiles(Machine) Service ImportMetrologyFiles(Machine)
If Machine NE '' then If Machine NE '' then
hSysLists = Database_Services('GetTableHandle', 'SYSLISTS') hSysLists = Database_Services('GetTableHandle', 'SYSLISTS')
Lock hSysLists, ServiceKeyID:'*':Machine then Lock hSysLists, ServiceKeyID:'*':Machine then
@ -399,10 +398,10 @@ Service ImportMetrologyFiles(Machine)
Begin Case Begin Case
Case Machine _EQC 'Tencor' Case Machine _EQC 'Tencor'
SearchPattern = '*.pdsf'; SearchPattern = '*.txt';
DataPath = Environment_Services('GetApplicationRootPath') : '\Metrology\MET08DDUPSFS6420\Source\MET08DDUPSFS6420\' DataPath = Environment_Services('GetApplicationRootPath') : '\Metrology\MET08DDUPSFS6420\Source\MET08DDUPSFS6420\'
Case Machine _EQC 'HgCV' Case Machine _EQC 'HgCV'
SearchPattern = '*.pdsf'; SearchPattern = '*.txt';
DataPath = Environment_Services('GetApplicationRootPath') : '\Metrology\MET08RESIHGCV\Source\MET08RESIHGCV\' DataPath = Environment_Services('GetApplicationRootPath') : '\Metrology\MET08RESIHGCV\Source\MET08RESIHGCV\'
Case Machine _EQC 'CDE' Case Machine _EQC 'CDE'
SearchPattern = '*.pdsf'; SearchPattern = '*.pdsf';
@ -519,15 +518,6 @@ Service ImportMetrologyFiles(Machine)
END ELSE END ELSE
OSREAD RunData FROM DataPath:FileName THEN OSREAD RunData FROM DataPath:FileName THEN
Set_Status(0)
OSWrite RunData to RepoPath:FileName
status_code = ''
If Get_Status(status_code) then
ErrorMessage = 'Error writing run data file to repository: status_code = ' : status_code
Metrology_Services('LogResults', '', Machine, 'UID001', Service : ' : ' : ErrorMessage)
Set_Status(0)
end
SWAP '|' WITH @VM IN RunData SWAP '|' WITH @VM IN RunData
SWAP CRLF$ WITH @FM IN RunData SWAP CRLF$ WITH @FM IN RunData
@ -662,7 +652,12 @@ Service ImportMetrologyRunData(Machine, DataPath, FileName, RunData)
Begin Case Begin Case
Case Machine _EQC 'Stratus' Case Machine _EQC 'Stratus'
PSN = RunData<9> PSN = RunData<9>
QualFile = ( (PSN EQ 'T-Low') or (PSN EQ 'T-Mid') or (PSN EQ 'T-High') or (PSN EQ 'T_LOW') or (PSN EQ 'T_MID') or (PSN EQ 'T_HIGH') )
IF QualFile THEN
Metrology_Services('ImportStratusQualData', RunData, ResourceID, PSN)
END ELSE
Metrology_Services('ImportStratusData', RunData, ResourceID, PSN) Metrology_Services('ImportStratusData', RunData, ResourceID, PSN)
END
MachineType@ = 'Stratus' MachineType@ = 'Stratus'
Case Machine _EQC 'Biorad' Case Machine _EQC 'Biorad'
@ -689,8 +684,8 @@ Service ImportMetrologyRunData(Machine, DataPath, FileName, RunData)
PSN = RunData<5> PSN = RunData<5>
QualFile = ( (PSN EQ 'Low') or (PSN EQ 'Mid') or (PSN EQ 'High') or (PSN EQ 'Thin') ) QualFile = ( (PSN EQ 'Low') or (PSN EQ 'Mid') or (PSN EQ 'High') or (PSN EQ 'Thin') )
IF QualFile THEN IF QualFile THEN
Metrology_Services('ImportHgCVQualData', RunData, ResourceID, PSN)
END ELSE END ELSE
Metrology_Services('ImportHgCVQualData', RunData, ResourceID, PSN)
Metrology_Services('ImportHgCVData', RunData, ResourceID, IsViewerFile, PSN) Metrology_Services('ImportHgCVData', RunData, ResourceID, IsViewerFile, PSN)
END END
MachineType@ = 'HgProbe' MachineType@ = 'HgProbe'
@ -723,6 +718,43 @@ Service ImportMetrologyRunData(Machine, DataPath, FileName, RunData)
end service end service
Service ImportStratusQualData(RunData, ResourceID, PSN)
Machine = 'Stratus'
URL = "https://oi-metrology-viewer-prod.mes.infineon.com/api/InfinityQSV3/":ResourceID:"/header"
TimeoutDuration = HTTPClient_Services('GetTimeoutDuration')
If TimeoutDuration NE 30 then Httpclient_Services('SetTimeoutDuration', 30)
Response = Httpclient_Services('SendHTTPRequest', 'GET', URL, '', '', '', '', '', '', '')
If Response NE '' then
objJSON = ''
If SRP_JSON(objJSON, 'Parse', Response) EQ '' then
SumOOS = SRP_JSON(objJSON, 'GetValue', 'Results[1].iq_sum')
ToolID = RunData<3>
TimeStamp = RunData<2>
If SumOOS NE '' then
Swap 'T_LOW' with 'T-Low' in PSN
Swap 'T_MID' with 'T-Mid' in PSN
Swap 'T_HIGH' with 'T-High' in PSN
Pass = (SumOOS EQ 0)
QualResponse = PM_Services('ProcessQual', PSN, ToolID, TimeStamp, Pass)
StatusCode = QualResponse<1>
Message = QualResponse<2>
Metrology_Services('LogResults', PSN, Machine, StatusCode, Service : ' : ' : Message)
end else
LogMessage = 'IQS response missing Results[1].iq_sum. Error message: ':SRP_JSON(objJSON, 'GetValue', 'message')
Metrology_Services('LogResults', PSN, Machine, 'UID002', Service : ' : ' : LogMessage)
end
SRP_JSON(objJSON, 'Release')
end else
Metrology_Services('LogResults', PSN, Machine, 'UID002', Service : ' : ' : 'Failed to parse IQS JSON response')
end
end else
Metrology_Services('LogResults', PSN, Machine, 'UID002', Service : ' : ' : 'Null response from IQS API.')
end
end service
Service ImportStratusData(RunData, ResourceID, PSN) Service ImportStratusData(RunData, ResourceID, PSN)
Machine = 'Stratus' Machine = 'Stratus'
@ -967,8 +999,14 @@ Service ImportBioRadData(RunData, ResourceID, IsViewerFile, PSN, FileName)
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSKeyID) RDSRec = Database_Services('ReadDataRow', 'RDS', RDSKeyID)
If Error_Services('NoError') then If Error_Services('NoError') then
WorkOrderNo = RDSRec<RDS_WO$> WorkOrderNo = RDSRec<RDS_WO$>
// HgCV Project Development Code -------------------------------------------------------------------------------
DevelopmentFlag = Xlate('DEVELOPMENT', 'HGCV', 'STATUS', 'X')
If (DevelopmentFlag EQ True$) then
IsProdTest = ( Indexc(ScanRecipe, 'PROD', 1) GT 0 ) IsProdTest = ( Indexc(ScanRecipe, 'PROD', 1) GT 0 )
If IsProdTest EQ True$ then Metrology_Services('LogResults',RDSKeyID,Machine,'HgCV','Product test recognized. Recipe name: ':ScanRecipe) If IsProdTest EQ True$ then Metrology_Services('LogResults',RDSKeyID,Machine,'HgCV','Product test recognized. Recipe name: ':ScanRecipe)
end
// -------------------------------------------------------------------------------------------------------------
CassNo = RDSRec<RDS_CASS_NO$> CassNo = RDSRec<RDS_CASS_NO$>
WorkOrder = Work_Order_Services('GetWorkOrder', WorkOrderNo, False$) WorkOrder = Work_Order_Services('GetWorkOrder', WorkOrderNo, False$)
GoSub ParseWorkOrder GoSub ParseWorkOrder
@ -1290,7 +1328,7 @@ Service ImportCDEQualData(RunData, ResourceID, PSN)
end service end service
Service ImportCDEData(RunData, ResourceID, IsViewerFile, PSN) Service ImportCDEData(RunData, ResourceID, IsViewerFile)
Machine = 'CDE' Machine = 'CDE'
ParseArray = '' ParseArray = ''
@ -1304,6 +1342,7 @@ Service ImportCDEData(RunData, ResourceID, IsViewerFile, PSN)
RunDataZone = RunData<10> RunDataZone = RunData<10>
ReactorID = RunData<6> ReactorID = RunData<6>
ScanRecipe = RunData<5> ScanRecipe = RunData<5>
PSN = RunData<8>
// Regular metrology file // Regular metrology file
ToolClassID = '4PP' ToolClassID = '4PP'
PatternNameIndex = RDS_TEST_SPEC_RES_MPATTERN$ PatternNameIndex = RDS_TEST_SPEC_RES_MPATTERN$
@ -1315,8 +1354,13 @@ Service ImportCDEData(RunData, ResourceID, IsViewerFile, PSN)
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSKeyID) RDSRec = Database_Services('ReadDataRow', 'RDS', RDSKeyID)
If Error_Services('NoError') then If Error_Services('NoError') then
// HgCV Project Development Code -------------------------------------------------------------------------------
DevelopmentFlag = Xlate('DEVELOPMENT', 'HGCV', 'STATUS', 'X')
If (DevelopmentFlag EQ True$) then
IsProdTest = ( Indexc(ScanRecipe, 'PROD', 1) GT 0 ) IsProdTest = ( Indexc(ScanRecipe, 'PROD', 1) GT 0 )
If IsProdTest EQ True$ then Metrology_Services('LogResults',RDSKeyID,Machine,'HgCV','Product test recognized. Recipe name: ':ScanRecipe) If IsProdTest EQ True$ then Metrology_Services('LogResults',RDSKeyID,Machine,'HgCV','Product test recognized. Recipe name: ':ScanRecipe)
end
// -------------------------------------------------------------------------------------------------------------
WorkOrderNo = RDSRec<RDS_WO$> WorkOrderNo = RDSRec<RDS_WO$>
CassNo = RDSRec<RDS_CASS_NO$> CassNo = RDSRec<RDS_CASS_NO$>
@ -1531,7 +1575,7 @@ Service ImportHgCVQualData(RunData, ResourceID, PSN)
end service end service
Service ImportHgCVData(RunData, ResourceID, IsViewerFile, PSN) Service ImportHgCVData(RunData, PSN)
Machine = 'HgCV' /* Resistivity */ Machine = 'HgCV' /* Resistivity */
FieldPos = 53 FieldPos = 53
@ -3273,3 +3317,5 @@ LoadRunDataToDatabase:
return return

View File

@ -18,7 +18,7 @@ Parm3:
-For Metric updates this represents the numeric data that you wish to send. -For Metric updates this represents the numeric data that you wish to send.
***************************************************************/ ***************************************************************/
Declare Subroutine Errmsg, Error_Services, Delay, Mona_Services, Service_Services Declare Subroutine Errmsg, Error_Services, Delay, Mona_Services
Declare function Get_Status, SRP_Datetime, Environment_Services, Httpclient_Services Declare function Get_Status, SRP_Datetime, Environment_Services, Httpclient_Services
#pragma precomp SRP_PreCompiler #pragma precomp SRP_PreCompiler
@ -44,31 +44,17 @@ Options STATES = 'OK', 'WARNING', 'CRITICAL'
Service SendStatus(MonitorName=MONITORS, StatusName, CurrentState=STATES) Service SendStatus(MonitorName=MONITORS, StatusName, CurrentState=STATES)
Mona_Services("PostStatus", MonitorName, StatusName, CurrentState) Mona_Services("SendBufferedStatus", MonitorName, StatusName, CurrentState)
end service end service
Service PostStatus(MonitorName, StatusName, CurrentState=STATES)
Service_Services('PostProcedure', 'MONA_SERVICES', 'SendBufferedStatus':@VM:MonitorName:@VM:StatusName:@VM:CurrentState)
end service
Service SendMetric(MonitorName=MONITORS, MetricName, Number) Service SendMetric(MonitorName=MONITORS, MetricName, Number)
Mona_Services("PostAverageMetric", MonitorName, MetricName, Number) Mona_Services("SendBufferedAverageMetric", MonitorName, MetricName, Number)
end Service end Service
Service PostAverageMetric(MonitorName, MetricName, Number)
Service_Services('PostProcedure', 'MONA_SERVICES', 'SendBufferedAverageMetric':@VM:MonitorName:@VM:MetricName:@VM:Number)
end service
Service SendCountMetric(MonitorName=MONITORS, MetricName, Number)
Mona_Services("PostCountMetric", MonitorName, MetricName, Number)
end Service
Service PostCountMetric(MonitorName, MetricName, Number)
Service_Services('PostProcedure', 'MONA_SERVICES', 'SendBufferedCountMetric':@VM:MonitorName:@VM:MetricName:@VM:Number)
end service
Service SendBufferedStatus(MonaResource, StatusName, StatusValue) Service SendBufferedStatus(MonaResource, StatusName, StatusValue)
@ -186,67 +172,6 @@ Service SendBufferedAverageMetric(MonaResource, MetricName, MetricValue)
end service end service
Service SendBufferedCountMetric(MonaResource, MetricName, MetricValue)
If MonaResource EQ '' then
MonaResource = Environment_Services("GetMonaResource")
end
DateTime = SRP_DateTime('Now')
Year = SRP_Datetime("Year", DateTime)
Month = SRP_Datetime("Month", DateTime)
If Len(Month) EQ 1 then
Month = '0':Month
end
Day = SRP_Datetime("Day", DateTime)
If Len(Day) EQ 1 then
Day = '0':Day
end
Hour = SRP_Datetime("Hour", DateTime)
If Len(Hour) EQ 1 then
Hour = '0':Hour
end
Minute = SRP_Datetime("Minute", DateTime)
If Len(Minute) EQ 1 then
Minute = '0':Minute
end
Second = SRP_Datetime("Second", DateTime)
If Len(Second) EQ 1 then
Second = '0':Second
end
RequestBodyJson = '{ "resource": "':MonaResource:'"'
RequestBodyJson = RequestBodyJson:', "dateTime": "':Year:'-':Month:'-':Day:'T':Hour:':':Minute:':':Second:'Z"'
RequestBodyJson = RequestBodyJson:', "metricName": "':MetricName:'"'
RequestBodyJson = RequestBodyJson:', "metricValue": "':MetricValue:'" }'
ApiUrl = Environment_Services("GetMonInBufferedWorkerApiUrl"):'/count'
retries = 3
backoffSeconds = 1
isSuccessful = False$
Loop
while (isSuccessful EQ False$ and retries GT 0)
waitSeconds = (3 - retries) * backoffSeconds
Delay(waitSeconds)
retries = retries - 1
response = Httpclient_Services('SendHTTPRequest', 'POST', ApiUrl, 'Content-Type':@VM:'application/json':@FM:'Accept':@VM:'*/*', RequestBodyJson, '', '', False$, False$, '')
If response EQ '"Request queued for processing"' then
isSuccessful = True$
end
Repeat
end service
Service QueueLatencyAndCountMetrics(MonaResource, MetricName, StartTick, EndTick)
Diff = EndTick - StartTick
Mona_Services('SendMetric', MonaResource, MetricName:'_LATENCY', Diff)
Mona_Services('SendCountMetric', MonaResource, MetricName:'_COUNT', 1)
end service
SwapResourceNames: SwapResourceNames:
@ -270,4 +195,3 @@ SwapResourceNames:
return return

View File

@ -3,7 +3,7 @@ Compile function NDW_WAFER_COUNTS_EVENTS(CtrlEntId, Event, @PARAMS)
#window NDW_WAFER_COUNTS #window NDW_WAFER_COUNTS
Declare function Reactor_Services, Database_Services, Get_Property, Error_Services, Environment_Services Declare function Reactor_Services, Database_Services, Get_Property, Error_Services, Environment_Services
Declare function SRP_Array, Logging_Services Declare function SRP_Array, Logging_Services
Declare subroutine Set_Property, Logging_Services, PlaceDialog Declare subroutine Set_Property, Logging_Services
$Insert EVENT_SETUP $Insert EVENT_SETUP
$Insert APP_INSERTS $Insert APP_INSERTS
@ -15,7 +15,6 @@ EQU DATA_ASM_SUSC_THK$ to 3
EQU DATA_ASM_TUBE_CNT$ to 4 EQU DATA_ASM_TUBE_CNT$ to 4
EQU DATA_ASM_TUBE_THK$ to 5 EQU DATA_ASM_TUBE_THK$ to 5
EQU DATA_ASM_ARM_CNT$ to 6 EQU DATA_ASM_ARM_CNT$ to 6
EQU DATA_ASM_EXHAUST_THK$ to 7
EQU DATA_HTR_REACT_ID$ to 1 EQU DATA_HTR_REACT_ID$ to 1
EQU DATA_HTR_SUSC_CNT$ TO 2 EQU DATA_HTR_SUSC_CNT$ TO 2
@ -23,7 +22,6 @@ EQU DATA_HTR_SUSC_THK$ TO 3
EQU DATA_HTR_TUBE_CNT$ TO 4 EQU DATA_HTR_TUBE_CNT$ TO 4
EQU DATA_HTR_TUBE_THK$ TO 5 EQU DATA_HTR_TUBE_THK$ TO 5
EQU DATA_HTR_ARM_CNT$ TO 6 EQU DATA_HTR_ARM_CNT$ TO 6
EQU DATA_HTR_EXHAUST_THK$ TO 7
EQU DATA_EPP_REACT_ID$ to 1 EQU DATA_EPP_REACT_ID$ to 1
EQU DATA_EPP_SUSC_CNT$ TO 2 EQU DATA_EPP_SUSC_CNT$ TO 2
@ -32,7 +30,6 @@ EQU DATA_EPP_BELL_JAR_CNT$ TO 4
EQU DATA_EPP_BELL_JAR_THK$ TO 5 EQU DATA_EPP_BELL_JAR_THK$ TO 5
EQU DATA_EPP_LOWER_QUARTZ_CNT$ TO 6 EQU DATA_EPP_LOWER_QUARTZ_CNT$ TO 6
EQU DATA_EPP_LOWER_QUARTZ_THK$ TO 7 EQU DATA_EPP_LOWER_QUARTZ_THK$ TO 7
EQU DATA_EPP_EXHAUST_THK$ TO 8
ASMDataTable = @Window : '.OLE_DATA_ASM' ASMDataTable = @Window : '.OLE_DATA_ASM'
HTRDataTable = @Window : '.OLE_DATA_HTR' HTRDataTable = @Window : '.OLE_DATA_HTR'
@ -52,11 +49,11 @@ If Event EQ 'OLE' then
Transfer Param1 to Event Transfer Param1 to Event
Transfer Param2 to Param1 Transfer Param2 to Param1
Transfer Param3 to Param2 Transfer Param3 to Param2
Transfer Param4 to Param3 * Transfer Param4 to Param3
Transfer Param5 to Param4 * Transfer Param5 to Param4
Transfer Param6 to Param5 * Transfer Param6 to Param5
Transfer Param7 to Param6 * Transfer Param7 to Param6
Transfer Param8 to Param7 * Transfer Param8 to Param7
end end
GoToEvent Event for CtrlEntId else GoToEvent Event for CtrlEntId else
@ -70,25 +67,17 @@ Return EventFlow or 1
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
Event WINDOW.CREATE(CreateParam) Event WINDOW.CREATE(CreateParam)
GoSub SetupOLEControls GoSub SetupOLEControls
GoSub GetReactorMetrics GoSub GetReactorMetrics
End Event End Event
Event TABCONTROL_1.CLICK() Event TABCONTROL_1.CLICK()
Page = Get_Property(@Window : '.TABCONTROL_1', 'VALUE') Page = Get_Property(@Window : '.TABCONTROL_1', 'VALUE')
Set_Property(@WINDOW,'VPOSITION', Page) Set_Property(@WINDOW,'VPOSITION', Page)
end event end event
Event PUB_REFRESH_DATA.CLICK() Event PUB_REFRESH_DATA.CLICK()
GoSub GetReactorMetrics GoSub GetReactorMetrics
end event end event
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
@ -96,7 +85,6 @@ end event
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
GetReactorMetrics: GetReactorMetrics:
ReactorRec = '' ReactorRec = ''
ASMData = '' ASMData = ''
HTRData = '' HTRData = ''
@ -123,7 +111,6 @@ GetReactorMetrics:
ASMData<rPos, DATA_ASM_TUBE_CNT$> = MetricData<1, DATA_ASM_TUBE_CNT$> ASMData<rPos, DATA_ASM_TUBE_CNT$> = MetricData<1, DATA_ASM_TUBE_CNT$>
ASMData<rPos, DATA_ASM_TUBE_THK$> = MetricData<1, DATA_ASM_TUBE_THK$> ASMData<rPos, DATA_ASM_TUBE_THK$> = MetricData<1, DATA_ASM_TUBE_THK$>
ASMData<rPos, DATA_ASM_ARM_CNT$> = MetricData<1, DATA_ASM_ARM_CNT$> ASMData<rPos, DATA_ASM_ARM_CNT$> = MetricData<1, DATA_ASM_ARM_CNT$>
ASMData<rPos, DATA_ASM_EXHAUST_THK$> = MetricData<1, DATA_ASM_EXHAUST_THK$>
end else end else
ErrorMessage = Error_Services('GetMessage') ErrorMessage = Error_Services('GetMessage')
LogData = LoggingDTM : @FM : ErrorMessage LogData = LoggingDTM : @FM : ErrorMessage
@ -142,7 +129,6 @@ GetReactorMetrics:
HTRData<rPos, DATA_HTR_TUBE_CNT$> = MetricData<1, DATA_HTR_TUBE_CNT$> HTRData<rPos, DATA_HTR_TUBE_CNT$> = MetricData<1, DATA_HTR_TUBE_CNT$>
HTRData<rPos, DATA_HTR_TUBE_THK$> = MetricData<1, DATA_HTR_TUBE_THK$> HTRData<rPos, DATA_HTR_TUBE_THK$> = MetricData<1, DATA_HTR_TUBE_THK$>
HTRData<rPos, DATA_HTR_ARM_CNT$> = MetricData<1, DATA_HTR_ARM_CNT$> HTRData<rPos, DATA_HTR_ARM_CNT$> = MetricData<1, DATA_HTR_ARM_CNT$>
HTRData<rPos, DATA_HTR_EXHAUST_THK$> = MetricData<1, DATA_HTR_EXHAUST_THK$>
end else end else
ErrorMessage = Error_Services('GetMessage') ErrorMessage = Error_Services('GetMessage')
LogData = LoggingDTM : @FM : ErrorMessage LogData = LoggingDTM : @FM : ErrorMessage
@ -163,7 +149,6 @@ GetReactorMetrics:
EPPData<rPos, DATA_EPP_BELL_JAR_THK$> = MetricData<1, DATA_EPP_BELL_JAR_THK$> EPPData<rPos, DATA_EPP_BELL_JAR_THK$> = MetricData<1, DATA_EPP_BELL_JAR_THK$>
EPPData<rPos, DATA_EPP_LOWER_QUARTZ_CNT$> = MetricData<1, DATA_EPP_LOWER_QUARTZ_CNT$> EPPData<rPos, DATA_EPP_LOWER_QUARTZ_CNT$> = MetricData<1, DATA_EPP_LOWER_QUARTZ_CNT$>
EPPData<rPos, DATA_EPP_LOWER_QUARTZ_THK$> = MetricData<1, DATA_EPP_LOWER_QUARTZ_THK$> EPPData<rPos, DATA_EPP_LOWER_QUARTZ_THK$> = MetricData<1, DATA_EPP_LOWER_QUARTZ_THK$>
EPPData<rPos, DATA_EPP_EXHAUST_THK$> = MetricData<1, DATA_EPP_EXHAUST_THK$>
end else end else
ErrorMessage = Error_Services('GetMessage') ErrorMessage = Error_Services('GetMessage')
LogData = LoggingDTM : @FM : ErrorMessage LogData = LoggingDTM : @FM : ErrorMessage
@ -174,55 +159,36 @@ GetReactorMetrics:
return return
SetupOLEControls: SetupOLEControls:
// Set Row Headers to invisible //Set Row Headers to invisible
Set_Property(ASMDataTable, "OLE.HeaderColumn[1]", '':@FM:False$) Set_Property(ASMDataTable, "OLE.HeaderColumn[1]", '':@FM:False$)
Set_Property(HTRDataTable, "OLE.HeaderColumn[1]", '':@FM:False$) Set_Property(HTRDataTable, "OLE.HeaderColumn[1]", '':@FM:False$)
Set_Property(EPPDataTable, "OLE.HeaderColumn[1]", '':@FM:False$) Set_Property(EPPDataTable, "OLE.HeaderColumn[1]", '':@FM:False$)
// Set Number of columns for each table //Set Number of columns for each table
Set_Property(ASMDataTable, "OLE.Dimension", 7);*6 columns for ASM Data Table Set_Property(ASMDataTable, "OLE.Dimension", 6);*6 columns for ASM Data Table
Set_Property(HTRDataTable, "OLE.Dimension", 7);*6 columns for HTR Data Table Set_Property(HTRDataTable, "OLE.Dimension", 6);*6 columns for HTR Data Table
Set_Property(EPPDataTable, "OLE.Dimension", 8);*7 columns for EPP Data Table Set_Property(EPPDataTable, "OLE.Dimension", 7);*7 columns for EPP Data Table
// Set size of all columns //Set size of columns
ColSizeArray = '' ColSizeArray = ''
ColSizeArray<1> = 115 ColSizeArray<1> = 100
Set_Property(ASMDataTable, "OLE.DataColumn[All]", ColSizeArray) Set_Property(ASMDataTable, "OLE.DataColumn[All]", ColSizeArray)
Set_Property(HTRDataTable, "OLE.DataColumn[All]", ColSizeArray) Set_Property(HTRDataTable, "OLE.DataColumn[All]", ColSizeArray)
Set_Property(EPPDataTable, "OLE.DataColumn[All]", ColSizeArray) Set_Property(EPPDataTable, "OLE.DataColumn[All]", ColSizeArray)
// Shrink size of column 1
ColSizeArray<1> = 60
Set_Property(ASMDataTable, "OLE.DataColumn[1]", ColSizeArray)
Set_Property(HTRDataTable, "OLE.DataColumn[1]", ColSizeArray)
Set_Property(EPPDataTable, "OLE.DataColumn[1]", ColSizeArray)
// Set size of all columns
ColSizeArray = ''
ColSizeArray<1> = 125
Set_Property(EPPDataTable, "OLE.DataColumn[6]", ColSizeArray)
// Set autosize last column to true to fill out table width
ColSizeArray<1> = 125
ColSizeArray<4> = True$
Set_Property(ASMDataTable, "OLE.DataColumn[7]", ColSizeArray)
Set_Property(HTRDataTable, "OLE.DataColumn[7]", ColSizeArray)
Set_Property(EPPDataTable, "OLE.DataColumn[8]", ColSizeArray)
//Set ASM Table Col. Headers //Set ASM Table Col. Headers
HeaderTitles = 'Reactor#':@VM:'Susc. Wfr. Cnt.':@VM:'Susc. Thk':@VM:'Tube Wfr. Cnt.':@VM:'Tube Wfr. Thk':@VM:'Arm Wfr. Cnt.':@VM:'Exhaust Chamber Thk.' HeaderTitles = 'Reactor#':@VM:'Susc. Wfr. Cnt.':@VM:'Susc. Thk':@VM:'Tube Wfr. Cnt.':@VM:'Tube Wfr. Thk':@VM:'Arm Wfr. Cnt.'
Set_Property(ASMDataTable, "OLE.TitleList", HeaderTitles) Set_Property(ASMDataTable, "OLE.TitleList", HeaderTitles)
//Set HTR Table Col. Headers //Set HTR Table Col. Headers
HeaderTitles = 'Reactor#':@VM:'Susc. Run Cnt.':@VM:'Susc. Thk':@VM:'Tube Run Cnt.':@VM:'Tube Thk':@VM:'Arm Wfr. Cnt.':@VM:'Exhaust Chamber Thk.' HeaderTitles = 'Reactor#':@VM:'Susc. Run Cnt.':@VM:'Susc. Thk':@VM:'Tube Run Cnt.':@VM:'Tube Thk':@VM:'Arm Wfr. Cnt.'
Set_Property(HTRDataTable, "OLE.TitleList", HeaderTitles) Set_Property(HTRDataTable, "OLE.TitleList", HeaderTitles)
//Set EPP Table Col. Headers //Set EPP Table Col. Headers
HeaderTitles = 'Reactor#':@VM:'Susc. Run Cnt.':@VM:'Susc. Thk':@VM:'Bell Jar Run Cnt.':@VM:'Bell Jar Thk':@VM:'Lower Quartz Run Cnt.':@VM:'Lower Quartz thk.':@VM:'Exhaust Chamber Thk.' HeaderTitles = 'Reactor#':@VM:'Susc. Run Cnt.':@VM:'Susc. Thk':@VM:'Bell Jar Run Cnt.':@VM:'Bell Jar Thk':@VM:'Lower Quartz Run Cnt.':@VM:'Lower Quartz thk.'
Set_Property(EPPDataTable, "OLE.TitleList", HeaderTitles) Set_Property(EPPDataTable, "OLE.TitleList", HeaderTitles)
return return

View File

@ -53,10 +53,8 @@ Return Response or ""
Options BOOLEAN = True$, False$ Options BOOLEAN = True$, False$
Options ENTITY_TYPES = 'REACTOR','REACTOR_LOG' Options ENTITY_TYPES = 'REACTOR','REACTOR_LOG'
Options ORDER_TYPES = 'INTRUSIVE_MAINT','CHANGEOVER','INITIATE_IDLE','IDLE','ASM_HTR_TUBE_CHANGE','ASM_HTR_ANNUAL_PM','ASM_HTR_SEMIANNUAL_PM','ASM_HTR_FIVE_AND_TEN_YEAR_PM','IQS_HGCV_ALARM','ABORT_ALARM' Options ORDER_TYPES = 'INTRUSIVE_MAINT','CHANGEOVER','INITIATE_IDLE','IDLE','ASM_HTR_TUBE_CHANGE','ASM_HTR_ANNUAL_PM','ASM_HTR_SEMIANNUAL_PM','ASM_HTR_FIVE_AND_TEN_YEAR_PM','IQS_HGCV_ALARM','ABORT_ALARM'
Options ORDER_STATUSES = 'new','in-edit','creating','not-started','in-progress','cancelled','done' Options ORDER_STATUSES = 'new','creating','not-started','in-progress','cancelled','done'
Options REACTOR_TYPES = 'ASM','ASM+','HTR','EPP' Options REACTOR_TYPES = 'ASM','ASM+','HTR','EPP'
Options ORDER_CHECKLIST_STATUSES = 'not-started','in-progress','paused','done'
Options NICA_CHECKLISTS = 'PROCESS_INTERRUPTION_FLOW_C_PRE','PROCESS_INTERRUPTION_FLOW_A_PRE','PROCESS_INTERRUPTION_FLOW_B_PRE','PROCESS_INTERRUPTION_LAST_KNOWN_PRODUCT_THICKNESS_SHEETRHO','PROCESS_INTERRUPTION_LAST_KNOWN_PRODUCT_VISUAL_INSPECTION','PROCESS_INTERRUPTION_TEST_WAFER','PROCESS_INTERRUPTION_ASM_PARTICLE_QUAL_VISUAL_INSPECTION','PROCESS_INTERRUPTION_HTR_PARTICLE_QUAL_VISUAL_INSPECTION','SUSCEPTOR_PREP','1_PCRC','2_PCRC','BD','INTRINSIC','SPV-FE','CLEANUP','TEST_WAFER_VERIFICATION','PARTICLE_QUAL_ASM','PARTICLE_QUAL_HTR','FIRST_PRODUCT_RUN_HGCV','FIRST_PRODUCT_RUN_THICK','PROCESS_INTERRUPTION_FLOW_B_POST'
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// SERVICES // SERVICES
@ -87,7 +85,6 @@ Service GetOrderIds(EntityType=ENTITY_TYPES, EntityID, OrderTypes=ORDER_TYPES, O
For each Val in IsComplete using @VM For each Val in IsComplete using @VM
Query := @VM : Val Query := @VM : Val
Next Val Next Val
Query := @FM
end end
Btree.Extract(Query, Table, hDict, OrderKeys, Option, Flag) Btree.Extract(Query, Table, hDict, OrderKeys, Option, Flag)
If Flag NE 0 then If Flag NE 0 then
@ -109,64 +106,6 @@ Service GetOrderIds(EntityType=ENTITY_TYPES, EntityID, OrderTypes=ORDER_TYPES, O
End Service End Service
Service GetOrderChecklistIds(NicaOrdersIds, NicaChecklistIds=NICA_CHECKLISTS, IsComplete=BOOLEAN, ChecklistOrderStates=ORDER_CHECKLIST_STATUSES)
OrderChecklistIds = ''
ErrorMsg = ''
If ( (NicaOrdersIds NE '') or (IsComplete NE '') or (ChecklistOrderStates NE '') ) then
Open 'DICT.NICA_ORDERS_CHECKLISTS' to hDict then
Query = ''
Table = 'NICA_ORDERS_CHECKLISTS'
Option = 'E'
Flag = ''
If (NicaOrdersIds NE '') then
Query := 'NICA_ORDERS_ID'
For each NicaOrderId in NicaOrdersIds using @VM
Query := @VM : NicaOrderId
Next NicaOrderId
Query := @FM
end
If (NicaChecklistIds NE '') then
Query := 'NICA_CHECKLISTS_ID'
For each NicaChecklistId in NicaChecklistIds using @VM
Query := @VM : NicaChecklistId
Next NicaChecklistId
Query := @FM
end
If (IsComplete NE '') then
Query := 'IS_COMPLETE'
For each Val in IsComplete using @VM
Query := @VM : Val
Next Val
Query := @FM
end
If (ChecklistOrderStates NE '') then
Query := 'STATE'
For each ChecklistOrderState in ChecklistOrderStates using @VM
Query := @VM : ChecklistOrderState
Next ChecklistOrderState
Query := @FM
end
Btree.Extract(Query, Table, hDict, OrderChecklistIds, Option, Flag)
If Flag NE 0 then
ErrorMsg = 'Error in ':Service:' service. Btree.Extract call failed.'
end
end else
ErrorMsg = 'Error in ':Service:' service. Failed to open DICT.NICA_ORDERS_CHECKLISTS.'
end
end else
ErrorMsg = 'Error in ':Service:' service. At least one search parameter must be provided.'
end
If ErrorMsg EQ '' then
Response = OrderChecklistIds
end else
Error_Services('Add', ErrorMsg)
end
end service
Service GetOrderUpdates() Service GetOrderUpdates()
hSysLists = Database_Services('GetTableHandle', 'SYSLISTS') hSysLists = Database_Services('GetTableHandle', 'SYSLISTS')
@ -255,9 +194,7 @@ Service GetActiveOrders(EntityType=ENTITY_TYPES, EntityId, OrderTypes=ORDER_TYPE
end service end service
Service CreateNewOrder(EntityType=ENTITY_TYPES, EntityID, OrderType=ORDER_TYPES, OrderFlows, OrderResponseLevel, ChecklistIds, Intrusive=BOOLEAN) Service CreateNewOrder(EntityType=ENTITY_TYPES, EntityID, OrderType=ORDER_TYPES, OrderFlows, OrderResponseLevel, ChecklistIds)
If Intrusive NE True$ then Intrusive = False$
ErrorMsg = '' ErrorMsg = ''
EntityTypes = 'REACTOR,REACTOR_LOG' EntityTypes = 'REACTOR,REACTOR_LOG'
@ -292,39 +229,7 @@ Service CreateNewOrder(EntityType=ENTITY_TYPES, EntityID, OrderType=ORDER_TYPES,
LogData<3> = 'Attempting to create NICA order for entity ':EntityType:' ' :EntityID:' of type ':OrderType LogData<3> = 'Attempting to create NICA order for entity ':EntityType:' ' :EntityID:' of type ':OrderType
Logging_Services('AppendLog', objLog, LogData, @RM, @FM, False$) Logging_Services('AppendLog', objLog, LogData, @RM, @FM, False$)
Begin Case
Case OrderType _EQC 'ABORT_ALARM'
OrderTypes = OrderType:@VM:'INTRUSIVE_MAINT'
CurrActiveOrders = Nica_Orders_Services('GetActiveOrders', EntityType, EntityID, OrderTypes)
If CurrActiveOrders NE '' then
// If any active ABORT_ALARM orders are marked as intrusive (i.e., they were merged
// with an INTRUSIVE_MAINT order then mark the new order as intrusive).
ActiveOrdersIntrusive = Sum(Xlate('NICA_ORDERS', CurrActiveOrders, 'INTRUSIVE', 'X'))
If ActiveOrdersIntrusive then Intrusive = True$
end
Case OrderType _EQC 'INTRUSIVE_MAINT'
Intrusive = True$
CurrActiveOrders = Nica_Orders_Services('GetActiveOrders', EntityType, EntityID, OrderType) CurrActiveOrders = Nica_Orders_Services('GetActiveOrders', EntityType, EntityID, OrderType)
CurrActiveAbortAlarmOrders = Nica_Orders_Services('GetActiveOrders', EntityType, EntityID, 'ABORT_ALARM')
If CurrActiveAbortAlarmOrders NE '' then
CurrActiveOrders<-1> = CurrActiveAbortAlarmOrders
// Merge INTRUSIVE_MAINT and ABORT_ALARM orders into one ABORT_ALARM order.
// Preserve ABORT_ALARM order flow ids for Reactor mode change logic that relies on these
// to determine whether or not to trigger a new ABORT/ALARM order when changing ABORT/ALARM sub modes.
OrderType = 'ABORT_ALARM'
OrderFlows = Xlate('NICA_ORDERS', CurrActiveAbortAlarmOrders, 'ORDER_FLOW_IDS', 'X')
OrderFlows = SRP_Array('Clean', OrderFlows, 'TrimAndMakeUnique', @VM)
end
Case Otherwise$
CurrActiveOrders = Nica_Orders_Services('GetActiveOrders', EntityType, EntityID, OrderType)
End Case
OrderTypeAlreadyActive = (CurrActiveOrders NE '') OrderTypeAlreadyActive = (CurrActiveOrders NE '')
If ( (OrderTypeAlreadyActive EQ False$) or (OrderType EQ 'INTRUSIVE_MAINT') or (OrderType EQ 'ABORT_ALARM') ) then If ( (OrderTypeAlreadyActive EQ False$) or (OrderType EQ 'INTRUSIVE_MAINT') or (OrderType EQ 'ABORT_ALARM') ) then
@ -395,17 +300,6 @@ Service CreateNewOrder(EntityType=ENTITY_TYPES, EntityID, OrderType=ORDER_TYPES,
end end
NewChecklistIds = SRP_Array('Clean', NewChecklistIds, 'TrimAndMakeUnique', @VM) NewChecklistIds = SRP_Array('Clean', NewChecklistIds, 'TrimAndMakeUnique', @VM)
If Intrusive then
// Remove checklist ids with REMOVE_IF_INRUSIVE flag set to True$
ChecklistIdsToRemove = Nica_Orders_Services('GetChecklistIds', '', '', '', '', '', '', True$)
If ChecklistIdsToRemove NE '' then
For each ChecklistIdToRemove in ChecklistIdsToRemove using @VM
Locate ChecklistIdToRemove in NewChecklistIds using @VM setting vPos then
NewChecklistIds = Delete(NewChecklistIds, 0, vPos, 0)
end
Next ChecklistIdToRemove
end
end
NewChecklistPriorities = Xlate('NICA_CHECKLISTS', NewChecklistIds, 'PRIORITY', 'X') NewChecklistPriorities = Xlate('NICA_CHECKLISTS', NewChecklistIds, 'PRIORITY', 'X')
ChecklistArray = NewChecklistIds:@FM:NewChecklistPriorities ChecklistArray = NewChecklistIds:@FM:NewChecklistPriorities
ChecklistArray = SRP_Array('SortRows', ChecklistArray, 'AR2', 'ARRAY', @FM, @VM) ChecklistArray = SRP_Array('SortRows', ChecklistArray, 'AR2', 'ARRAY', @FM, @VM)
@ -475,7 +369,6 @@ Service CreateNewOrder(EntityType=ENTITY_TYPES, EntityID, OrderType=ORDER_TYPES,
end end
NicaOrderRec<NICA_ORDERS.ORDER_FLOW_IDS$> = OrderFlows NicaOrderRec<NICA_ORDERS.ORDER_FLOW_IDS$> = OrderFlows
NicaOrderRec<NICA_ORDERS.ORDER_RESPONSE_LEVEL$> = OrderResponseLevel NicaOrderRec<NICA_ORDERS.ORDER_RESPONSE_LEVEL$> = OrderResponseLevel
NicaOrderRec<NICA_ORDERS.INTRUSIVE$> = Intrusive
LogNicaOrderRec = NicaOrderRec LogNicaOrderRec = NicaOrderRec
Swap @FM with ',' in LogNicaOrderRec Swap @FM with ',' in LogNicaOrderRec
LogData = '' LogData = ''
@ -1007,119 +900,6 @@ Service GetAvailableFlowIds(NicaOrderType=ORDER_TYPES)
end service end service
Service AbortAlarmFromIntrusiveMaintRequired(ReactNo)
ErrorMsg = ''
AbortAlarmFromIntrusiveMaintRequired = ''
If ReactNo NE '' then
If RowExists('REACTOR', ReactNo) then
ActiveIntrusiveMaintOrderIds = Nica_Orders_Services('GetActiveOrders', 'REACTOR', ReactNo, 'INTRUSIVE_MAINT')
IntrusiveMaintOrderActive = (ActiveIntrusiveMaintOrderIds NE '')
If IntrusiveMaintOrderActive then
// If any FIRST_PRODUCT_RUN_THICK or FIRST_PRODUCT_RUN_HGCV associated with active INTRUSIVE_MAINT
// orders have been started or completed, then an ABORT/ALARM order should be triggerd.
ChecklistIdsToSearch = 'FIRST_PRODUCT_RUN_THICK':@VM:'FIRST_PRODUCT_RUN_HGCV'
InProcessOrCompleteOrderChecklistIds = Nica_Orders_Services('GetOrderChecklistIds', ActiveIntrusiveMaintOrderIds, ChecklistIdsToSearch, '', '#not-started')
AbortAlarmFromIntrusiveMaintRequired = (InProcessOrCompleteOrderChecklistIds NE '')
end else
AbortAlarmFromIntrusiveMaintRequired = False$
end
end else
ErrorMsg = 'Error in ':Service:' service. REACTOR ':ReactNo:' does not exist.'
end
end else
ErrorMsg = 'Error in ':Service:' service. Null ReactNo passed into service.'
end
If ErrorMsg EQ '' then
Response = AbortAlarmFromIntrusiveMaintRequired
end else
Error_Services('Add', ErrorMsg)
end
end service
Service GetChecklistIds(Priorities, NicaBaseInstructionIds, NicaOrderFlowIds, NicaOrderFlowTypes, ReactorTypes, RemoveIfComplete=BOOLEAN, RemoveIfIntrusive=BOOLEAN)
ChecklistIds = ''
ErrorMsg = ''
If ( (Priorities NE '') or (NicaBaseInstructionIds NE '') or (NicaOrderFlowIds NE '') or (NicaOrderFlowTypes NE '') |
or (ReactorTypes NE '') or (RemoveIfComplete NE '') or (RemoveIfIntrusive NE '') ) then
Open 'DICT.NICA_CHECKLISTS' to hDict then
Query = ''
Table = 'NICA_CHECKLISTS'
Option = 'E'
Flag = ''
If (Priorities NE '') then
Query := 'PRIORITY'
For each Priority in Priorities using @VM
Query := @VM : Priority
Next Priority
Query := @FM
end
If (NicaBaseInstructionIds NE '') then
Query := 'NICA_BASE_INSTRUCTION_ID'
For each NicaBaseInstructionId in NicaBaseInstructionIds using @VM
Query := @VM : NicaBaseInstructionId
Next NicaBaseInstructionId
Query := @FM
end
If (NicaOrderFlowIds NE '') then
Query := 'NICA_ORDER_FLOW_IDS'
For each NicaOrderFlowId in NicaOrderFlowIds using @VM
Query := @VM : NicaOrderFlowId
Next NicaOrderFlowId
Query := @FM
end
If (NicaOrderFlowTypes NE '') then
Query := 'NICA_ORDER_FLOW_TYPE'
For each NicaOrderFlowType in NicaOrderFlowTypes using @VM
Query := @VM : NicaOrderFlowType
Next NicaOrderFlowTypes
Query := @FM
end
If (ReactorTypes NE '') then
Query := 'REACTOR_TYPES'
For each NicaOrderFlowType in NicaOrderFlowTypes using @VM
Query := @VM : NicaOrderFlowType
Next NicaOrderFlowTypes
Query := @FM
end
If (RemoveIfComplete NE '') then
Query := 'REMOVE_IF_COMPLETE'
For each Val in RemoveIfComplete using @VM
Query := @VM : Val
Next RemoveIfComplete
Query := @FM
end
If (RemoveIfIntrusive NE '') then
Query := 'REMOVE_IF_INTRUSIVE'
For each Val in RemoveIfIntrusive using @VM
Query := @VM : Val
Next Val
Query := @FM
end
Btree.Extract(Query, Table, hDict, ChecklistIds, Option, Flag)
If Flag NE 0 then
ErrorMsg = 'Error in ':Service:' service. Btree.Extract call failed.'
end
end else
ErrorMsg = 'Error in ':Service:' service. Failed to open DICT.NICA_CHECKLISTS.'
end
end else
ErrorMsg = 'Error in ':Service:' service. At least one search parameter must be provided.'
end
If ErrorMsg EQ '' then
Response = ChecklistIds
end else
Error_Services('Add', ErrorMsg)
end
end service
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Internal GoSubs // Internal GoSubs
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

View File

@ -20,7 +20,7 @@ COMPILE FUNCTION obj_Post_Log(Method,Parms)
DECLARE FUNCTION Get_Status, Msg, Utility, obj_Tables, Get_Property, obj_RDS, Database_Services, Environment_Services DECLARE FUNCTION Get_Status, Msg, Utility, obj_Tables, Get_Property, obj_RDS, Database_Services, Environment_Services
DECLARE FUNCTION Logging_Services, Datetime, SRP_DateTime, GetTickCount DECLARE FUNCTION Logging_Services, Datetime, SRP_DateTime
DECLARE SUBROUTINE Set_Status, Msg, obj_Tables, Send_Dyn, Send_Dyn, RList, obj_WO_Log, Send_Event, obj_RDS DECLARE SUBROUTINE Set_Status, Msg, obj_Tables, Send_Dyn, Send_Dyn, RList, obj_WO_Log, Send_Event, obj_RDS
DECLARE SUBROUTINE obj_WO_Mat, Send_Info, obj_Notes, ErrMsg, Logging_Services, Mona_Services DECLARE SUBROUTINE obj_WO_Mat, Send_Info, obj_Notes, ErrMsg, Logging_Services, Mona_Services
@ -42,13 +42,6 @@ Headers = 'Logging DTM' : @FM : 'WOMatKey' : @FM : ' SAPBatchNo' : @FM : 'Fa
objLog = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, Comma$, Headers, '', False$, False$) objLog = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, Comma$, Headers, '', False$, False$)
LoggingDTM = LogDate : ' ' : LogTime ; // Logging DTM LoggingDTM = LogDate : ' ' : LogTime ; // Logging DTM
IsProd = Environment_Services('IsProd')
If IsProd EQ True$ then
MonaResource = 'GRP_OPENINSIGHT_MES_OP_FE_OBJPOSTLOG'
end else
MonaResource = 'GRP_OPENINSIGHT_MES_OP_FE_DEV_OBJPOSTLOG'
end
ErrTitle = 'Error in Stored Procedure "obj_Post_Log"' ErrTitle = 'Error in Stored Procedure "obj_Post_Log"'
ErrorMsg = '' ErrorMsg = ''
@ -123,9 +116,6 @@ RETURN
Post: Post:
* * * * * * * * * * * * * *
StartTick = GetTickCount()
MetricName = 'Post'
hSysLists = Database_Services('GetTableHandle', 'SYSLISTS') hSysLists = Database_Services('GetTableHandle', 'SYSLISTS')
ServiceKeyID = 'Obj_Post_Log*Post' ServiceKeyID = 'Obj_Post_Log*Post'
Lock hSysLists, ServiceKeyID then Lock hSysLists, ServiceKeyID then
@ -239,9 +229,5 @@ Post:
Unlock hSysLists, ServiceKeyID else Null Unlock hSysLists, ServiceKeyID else Null
end end
EndTick = GetTickCount()
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
RETURN RETURN

View File

@ -18,8 +18,8 @@ COMPILE FUNCTION obj_Reactor(Method,Parms)
DECLARE SUBROUTINE Set_Status, Msg, obj_Tables, Send_Dyn, ErrMsg, Mona_Services DECLARE SUBROUTINE Set_Status, Msg, obj_Tables, Send_Dyn, ErrMsg
DECLARE FUNCTION Get_Status, Msg, Utility, obj_Tables, Environment_Services, GetTickCount DECLARE FUNCTION Get_Status, Msg, Utility, obj_Tables
$INSERT REACTOR_EQUATES $INSERT REACTOR_EQUATES
@ -28,14 +28,6 @@ $INSERT REACT_STATE_EQUATES
$INSERT REACT_ITEM_EQUATES $INSERT REACT_ITEM_EQUATES
$INSERT MSG_EQUATES $INSERT MSG_EQUATES
$insert REACTOR_CHILD_KEY_IDS_EQUATES $insert REACTOR_CHILD_KEY_IDS_EQUATES
$Insert LOGICAL
IsProd = Environment_Services('IsProd')
If IsProd EQ True$ then
MonaResource = 'GRP_OPENINSIGHT_MES_OP_FE_OBJREACTOR'
end else
MonaResource = 'GRP_OPENINSIGHT_MES_OP_FE_DEV_OBJREACTOR'
end
ErrTitle = 'Error in Stored Procedure "obj_Reactor"' ErrTitle = 'Error in Stored Procedure "obj_Reactor"'
ErrorMsg = '' ErrorMsg = ''
@ -74,9 +66,6 @@ RETURN Result
CurrItem: CurrItem:
* * * * * * * * * * * * * *
StartTick = GetTickCount()
MetricName = 'CurrItem'
ReactNo = Parms[1,@RM] ReactNo = Parms[1,@RM]
ItemType = Parms[COL2()+1,@RM] ItemType = Parms[COL2()+1,@RM]
ReactRec = Parms[COL2()+1,@RM] ReactRec = Parms[COL2()+1,@RM]
@ -107,9 +96,6 @@ LOCATE ItemType IN CurrInstTypes USING @VM SETTING Pos THEN
Result = FIELD(CurrInstItems<1,Pos>,'*',2) Result = FIELD(CurrInstItems<1,Pos>,'*',2)
END END
EndTick = GetTickCount()
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
RETURN RETURN
@ -117,9 +103,6 @@ RETURN
CurrGraphite: CurrGraphite:
* * * * * * * * * * * * * *
StartTick = GetTickCount()
MetricName = 'CurrGraphite'
ReactNo = Parms[1,@RM] ReactNo = Parms[1,@RM]
ReactRec = Parms[COL2()+1,@RM] ReactRec = Parms[COL2()+1,@RM]
@ -152,9 +135,6 @@ FOR I = 1 TO ciCnt
END END
NEXT I NEXT I
EndTick = GetTickCount()
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
RETURN RETURN

View File

@ -15,10 +15,10 @@ COMPILE FUNCTION obj_React_State(Method,Parms)
*/ */
DECLARE SUBROUTINE Set_Status, Msg, obj_Tables, Send_Dyn, ErrMsg, Database_Services, Mona_Services DECLARE SUBROUTINE Set_Status, Msg, obj_Tables, Send_Dyn, ErrMsg, Database_Services
DECLARE FUNCTION Get_Status, Msg, Utility, obj_Tables, NextKey, Send_Dyn, Database_Services, Error_Services DECLARE FUNCTION Get_Status, Msg, Utility, obj_Tables, NextKey, Send_Dyn, Database_Services, Error_Services
Declare function Environment_Services, GetTickCount
$INSERT REACT_STATE_EQUATES $INSERT REACT_STATE_EQUATES
$INSERT PROD_SPEC_EQUATES $INSERT PROD_SPEC_EQUATES
@ -28,12 +28,6 @@ $INSERT LOGICAL
EQU CRLF$ TO \0D0A\ EQU CRLF$ TO \0D0A\
EQU TAB$ TO \09\ EQU TAB$ TO \09\
IsProd = Environment_Services('IsProd')
If IsProd EQ True$ then
MonaResource = 'GRP_OPENINSIGHT_MES_OP_FE_OBJREACTSTATE'
end else
MonaResource = 'GRP_OPENINSIGHT_MES_OP_FE_DEV_OBJREACTSTATE'
end
ErrTitle = 'Error in Stored Procedure "obj_React_State"' ErrTitle = 'Error in Stored Procedure "obj_React_State"'
ErrorMsg = '' ErrorMsg = ''
@ -68,9 +62,6 @@ RETURN Result
ReactRunUnload: ReactRunUnload:
* * * * * * * * * * * * * *
StartTick = GetTickCount()
MetricName = 'ReactRunUnload'
* Upadate all parameters set at Reactor Unload signature * * Upadate all parameters set at Reactor Unload signature *
ReactNo = Parms[1,@RM] ReactNo = Parms[1,@RM]
@ -124,9 +115,6 @@ end
* otParms = FieldStore(otParms,@RM,4,0,RSRec) * otParms = FieldStore(otParms,@RM,4,0,RSRec)
* obj_Tables('WriteRec',otParms) * obj_Tables('WriteRec',otParms)
EndTick = GetTickCount()
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
RETURN RETURN

View File

@ -20,9 +20,9 @@ COMPILE FUNCTION obj_React_Status(Method,Parms)
#pragma precomp SRP_PreCompiler #pragma precomp SRP_PreCompiler
DECLARE FUNCTION Get_Status, Msg, Utility, obj_Tables, Dialog_Box,NextKey, Popup, Get_Property, Database_Services DECLARE FUNCTION Get_Status, Msg, Utility, obj_Tables, Dialog_Box,NextKey, Popup, Get_Property, Database_Services
DECLARE FUNCTION Error_Services, Environment_Services, Logging_Services, Override_Log_Services, GetTickCount DECLARE FUNCTION Error_Services, Environment_Services, Logging_Services, Override_Log_Services
DECLARE SUBROUTINE Set_Status, Msg, obj_Tables, Send_Dyn, Btree.Extract, ErrMsg, Database_Services, Rlist DECLARE SUBROUTINE Set_Status, Msg, obj_Tables, Send_Dyn, Btree.Extract, ErrMsg, Database_Services, Rlist
DECLARE SUBROUTINE Logging_Services, Mona_Services DECLARE SUBROUTINE Logging_Services
$INSERT LOGICAL $INSERT LOGICAL
$INSERT MSG_EQUATES $INSERT MSG_EQUATES
@ -43,13 +43,6 @@ LogFilename = LogDate[7, 4] : '-' : LogDate[1, 2] : '-' : LogDate[4, 2] :
Headers = 'Logging DTM' : @FM : 'User' : @FM : 'CassNo' : @FM : 'RDSNo' : @FM : 'Load DTM' : @FM : 'Service' : @FM : 'Notes' Headers = 'Logging DTM' : @FM : 'User' : @FM : 'CassNo' : @FM : 'RDSNo' : @FM : 'Load DTM' : @FM : 'Service' : @FM : 'Notes'
objReactStatusLog = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, Comma$, Headers, '', False$, False$) objReactStatusLog = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, Comma$, Headers, '', False$, False$)
IsProd = Environment_Services('IsProd')
If IsProd EQ True$ then
MonaResource = 'GRP_OPENINSIGHT_MES_OP_FE_OBJREACTSTATUS'
end else
MonaResource = 'GRP_OPENINSIGHT_MES_OP_FE_DEV_OBJREACTSTATUS'
end
ErrTitle = 'Error in Stored Procedure "obj_React_Status"' ErrTitle = 'Error in Stored Procedure "obj_React_Status"'
ErrorMsg = '' ErrorMsg = ''
@ -132,9 +125,6 @@ RETURN
CassLoad: CassLoad:
* * * * * * * * * * * * * *
StartTick = GetTickCount()
MetricName = 'CassLoad'
ReactNo = Parms[1,@RM] ReactNo = Parms[1,@RM]
WONo = Parms[COL2()+1,@RM] WONo = Parms[COL2()+1,@RM]
CassNo = Parms[COL2()+1,@RM] CassNo = Parms[COL2()+1,@RM]
@ -213,17 +203,12 @@ CassLoad:
Result = IdleTime Result = IdleTime
EndTick = GetTickCount()
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
RETURN RETURN
* * * * * * * * * * * * * *
CassUnload: CassUnload:
* * * * * * * * * * * * * *
StartTick = GetTickCount()
MetricName = 'CassUnload'
ReactNo = Parms[1,@RM] ReactNo = Parms[1,@RM]
WONo = Parms[COL2()+1,@RM] WONo = Parms[COL2()+1,@RM]
@ -286,17 +271,12 @@ CassUnload:
ErrorMsg = Error_Services('GetMessage') ErrorMsg = Error_Services('GetMessage')
end end
EndTick = GetTickCount()
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
RETURN RETURN
* * * * * * * * * * * * * *
ReactorLoad: ReactorLoad:
* * * * * * * * * * * * * *
StartTick = GetTickCount()
MetricName = 'ReactorLoad'
* EpiPro Reactor Load * EpiPro Reactor Load
@ -382,16 +362,11 @@ ReactorLoad:
ErrorMsg = 'Unable to read REACT_STATUS record ':ReactNo:' for update (':Method:').' ErrorMsg = 'Unable to read REACT_STATUS record ':ReactNo:' for update (':Method:').'
end end
EndTick = GetTickCount()
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
RETURN RETURN
* * * * * * * * * * * * * *
ReactorUnload: ReactorUnload:
* * * * * * * * * * * * * *
StartTick = GetTickCount()
MetricName = 'ReactorUnload'
* EpiPro Reactor Unload * EpiPro Reactor Unload
@ -457,9 +432,6 @@ ReactorUnload:
ErrorMsg = Error_Services('GetMessage') ErrorMsg = Error_Services('GetMessage')
end end
EndTick = GetTickCount()
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
RETURN RETURN

View File

@ -28,12 +28,11 @@ Compile Function obj_WO_Mat(Method,Parms)
Declare Function Get_Status, Msg, Utility, obj_Tables, Dialog_Box,NextKey, Popup, Get_Property, obj_RDS, RetStack Declare Function Get_Status, Msg, Utility, obj_Tables, Dialog_Box,NextKey, Popup, Get_Property, obj_RDS, RetStack
Declare Function Database_Services, GaN_Services, Logging_Services, Environment_Services, Signature_Services Declare Function Database_Services, GaN_Services, Logging_Services, Environment_Services, Signature_Services
Declare Function obj_WO_Mat, obj_WM_In, obj_WM_Out, obj_Prod_Spec, obj_Clean_Insp, obj_Calendar, obj_Popup Declare Function obj_WO_Mat, obj_WM_In, obj_WM_Out, obj_Prod_Spec, obj_Clean_Insp, obj_Calendar, obj_Popup
Declare Function Error_Services, Memberof, Datetime, GetTickCount Declare Function Error_Services, Memberof, Datetime
Declare Subroutine Set_Status, Msg, obj_Tables, Send_Dyn, Btree.Extract, ErrMsg, Send_Dyn, RList, obj_WO_Log, Send_Event Declare Subroutine Set_Status, Msg, obj_Tables, Send_Dyn, Btree.Extract, ErrMsg, Send_Dyn, RList, obj_WO_Log, Send_Event
Declare Subroutine obj_RDS, Extract_SI_Keys, obj_Pend_Ship_Labels, obj_WO_Mat_QA, Work_Order_Services, Service_Services Declare Subroutine obj_RDS, Extract_SI_Keys, obj_Pend_Ship_Labels, obj_WO_Mat_QA, Work_Order_Services, Service_Services
Declare Subroutine obj_notes, obj_Clean_Insp, obj_Post_Log, Send_Info, obj_WO_Mat_Log, obj_SAP, obj_WO_Mat, obj_WO_Wfr Declare Subroutine obj_notes, obj_Clean_Insp, obj_Post_Log, Send_Info, obj_WO_Mat_Log, obj_SAP, obj_WO_Mat, obj_WO_Wfr
Declare Subroutine Logging_Services, Set_Property, Delete, Database_Services, SRP_Stopwatch, Material_Services Declare Subroutine Logging_Services, Set_Property, Delete, Database_Services, SRP_Stopwatch, Material_Services
Declare subroutine Mona_Services
$Insert MSG_EQUATES $Insert MSG_EQUATES
$Insert WO_MAT_EQUATES $Insert WO_MAT_EQUATES
@ -121,13 +120,6 @@ SAPFileName = LogDate[7, 4] : '-' : LogDate[1, 2] : '-' : LogDate[4, 2] : ' SetS
SAPHeaders = 'Logging DTM' : @FM : 'WOMatKey' : @FM : 'SAPBatchNo' SAPHeaders = 'Logging DTM' : @FM : 'WOMatKey' : @FM : 'SAPBatchNo'
objSAPLog = Logging_Services('NewLog', SAPLogPath, SAPFileName, CRLF$, Comma$, SAPHeaders, '', False$, False$) objSAPLog = Logging_Services('NewLog', SAPLogPath, SAPFileName, CRLF$, Comma$, SAPHeaders, '', False$, False$)
IsProd = Environment_Services('IsProd')
If IsProd EQ True$ then
MonaResource = 'GRP_OPENINSIGHT_MES_OP_FE_OBJWOMAT'
end else
MonaResource = 'GRP_OPENINSIGHT_MES_OP_FE_DEV_OBJWOMAT'
end
IF NOT(ASSIGNED(Method)) THEN ErrorMsg = 'Unassigned parameter "Method" passed to subroutine' IF NOT(ASSIGNED(Method)) THEN ErrorMsg = 'Unassigned parameter "Method" passed to subroutine'
IF NOT(ASSIGNED(Parms)) THEN Parms = '' IF NOT(ASSIGNED(Parms)) THEN Parms = ''
@ -642,9 +634,6 @@ RETURN
CurrStatus: CurrStatus:
* * * * * * * * * * * * * *
StartTick = GetTickCount()
MetricName = 'CurrStatus'
IF NOT(ASSIGNED(WOMatKey)) THEN WOMatKey = Parms[1,@RM] IF NOT(ASSIGNED(WOMatKey)) THEN WOMatKey = Parms[1,@RM]
IF NOT(ASSIGNED(WOMatRec)) THEN WOMatRec = Parms[COL2()+1,@RM] IF NOT(ASSIGNED(WOMatRec)) THEN WOMatRec = Parms[COL2()+1,@RM]
@ -905,9 +894,6 @@ CurrStatus:
IF Result = 'RTS' AND WOMatRec<WO_MAT_SHIP_HOLD$> = 1 THEN Result = 'SHOLD' IF Result = 'RTS' AND WOMatRec<WO_MAT_SHIP_HOLD$> = 1 THEN Result = 'SHOLD'
EndTick = GetTickCount()
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
RETURN RETURN
@ -5580,4 +5566,3 @@ ExpCOA:
RETURN RETURN

View File

@ -17,9 +17,9 @@ COMPILE FUNCTION obj_WO_Mat_Log(Method,Parms)
DECLARE FUNCTION Get_Status, Msg, Utility, obj_Tables, Dialog_Box, NextKey, Popup, Get_Property, obj_RDS, Database_Services DECLARE FUNCTION Get_Status, Msg, Utility, obj_Tables, Dialog_Box, NextKey, Popup, Get_Property, obj_RDS, Database_Services
Declare function Logging_Services, Environment_Services, RTI_CreateGUID, Error_Services, Datetime, GetTickCount Declare function Logging_Services, Environment_Services, RTI_CreateGUID, Error_Services, Datetime
DECLARE SUBROUTINE Set_Status, Msg, obj_Tables, Send_Dyn, Btree.Extract, ErrMsg, Send_Dyn, RList, obj_WO_Log, Send_Event, obj_RDS DECLARE SUBROUTINE Set_Status, Msg, obj_Tables, Send_Dyn, Btree.Extract, ErrMsg, Send_Dyn, RList, obj_WO_Log, Send_Event, obj_RDS
DECLARE SUBROUTINE obj_WO_Mat, Send_Info, obj_Notes, Logging_Services, Database_Services, Lot_Event_Services, Mona_Services DECLARE SUBROUTINE obj_WO_Mat, Send_Info, obj_Notes, Logging_Services, Database_Services, Lot_Event_Services
$INSERT MSG_EQUATES $INSERT MSG_EQUATES
$INSERT WO_MAT_LOG_EQUATES $INSERT WO_MAT_LOG_EQUATES
@ -49,13 +49,6 @@ Headers = 'Logging DTM'
objLog = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, Comma$, Headers, '', False$, False$) objLog = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, Comma$, Headers, '', False$, False$)
LoggingDTM = LogDate : ' ' : LogTime ; // Logging DTM LoggingDTM = LogDate : ' ' : LogTime ; // Logging DTM
IsProd = Environment_Services('IsProd')
If IsProd EQ True$ then
MonaResource = 'GRP_OPENINSIGHT_MES_OP_FE_OBJWOMATLOG'
end else
MonaResource = 'GRP_OPENINSIGHT_MES_OP_FE_DEV_OBJWOMATLOG'
end
ErrTitle = 'Error in Stored Procedure "obj_WO_Mat_Log"' ErrTitle = 'Error in Stored Procedure "obj_WO_Mat_Log"'
ErrorMsg = '' ErrorMsg = ''
@ -84,8 +77,6 @@ RETURN Result
* * * * * * * * * * * * * *
Create: Create:
* * * * * * * * * * * * * *
StartTick = GetTickCount()
MetricName = 'Create'
LogFile = Parms[1,@RM] LogFile = Parms[1,@RM]
TransDTM = Parms[COL2()+1,@RM] TransDTM = Parms[COL2()+1,@RM]
@ -242,8 +233,6 @@ Create:
ErrorMsg = Error_Services('GetMessage') ErrorMsg = Error_Services('GetMessage')
end end
EndTick = GetTickCount()
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
RETURN RETURN
@ -375,4 +364,3 @@ Post:
RETURN RETURN

View File

@ -15,9 +15,8 @@ COMPILE FUNCTION obj_WO_React(Method,Parms)
*/ */
DECLARE FUNCTION Get_Status, Msg, Utility, obj_Tables, NextKey, obj_Prod_Spec, obj_WO_Mat_QA, GetTickCount DECLARE FUNCTION Get_Status, Msg, Utility, obj_Tables, NextKey, obj_Prod_Spec, obj_WO_Mat_QA
Declare function Environment_Services DECLARE SUBROUTINE Set_Status, Msg, obj_Tables, RList, ErrMsg, Btree.Extract, obj_WO_Mat_QA
DECLARE SUBROUTINE Set_Status, Msg, obj_Tables, RList, ErrMsg, Btree.Extract, obj_WO_Mat_QA, Mona_Services
$INSERT MSG_EQUATES $INSERT MSG_EQUATES
$INSERT WO_REACT_EQUATES $INSERT WO_REACT_EQUATES
@ -25,7 +24,6 @@ $INSERT PRS_STAGE_EQUATES
$INSERT WO_MAT_EQUATES $INSERT WO_MAT_EQUATES
$INSERT RDS_EQUATES $INSERT RDS_EQUATES
$INSERT QA_MET_EQUATES ;* Used in GetQAMet data structure return variable $INSERT QA_MET_EQUATES ;* Used in GetQAMet data structure return variable
$Insert LOGICAL
ErrTitle = 'Error in Stored Procedure "obj_PRS_Prop"' ErrTitle = 'Error in Stored Procedure "obj_PRS_Prop"'
@ -42,13 +40,6 @@ END
Result = '' Result = ''
Log = '' Log = ''
IsProd = Environment_Services('IsProd')
If IsProd EQ True$ then
MonaResource = 'GRP_OPENINSIGHT_MES_OP_FE_OBJWOREACT'
end else
MonaResource = 'GRP_OPENINSIGHT_MES_OP_FE_DEV_OBJWOREACT'
end
BEGIN CASE BEGIN CASE
CASE Method = 'AddRdsNo' ; GOSUB AddRdsNo CASE Method = 'AddRdsNo' ; GOSUB AddRdsNo
CASE Method = 'RemRdsNo' ; GOSUB RemRdsNo CASE Method = 'RemRdsNo' ; GOSUB RemRdsNo
@ -70,9 +61,6 @@ RETURN Result
AddRdsNo: AddRdsNo:
* * * * * * * * * * * * * *
StartTick = GetTickCount()
MetricName = 'AddRdsNo'
WONo = Parms[1,@RM] WONo = Parms[1,@RM]
StepNo = Parms[COL2()+1,@RM] StepNo = Parms[COL2()+1,@RM]
ReactNo = Parms[COL2()+1,@RM] ReactNo = Parms[COL2()+1,@RM]
@ -147,9 +135,6 @@ obj_Tables('WriteOnlyRec',otParms) ;* Done with updates to the WO_REA
Result = Log Result = Log
EndTick = GetTickCount()
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
RETURN RETURN
@ -158,9 +143,6 @@ RETURN
RemRDSNo: RemRDSNo:
* * * * * * * * * * * * * *
StartTick = GetTickCount()
MetricName = 'RemRDSNo'
WONo = Parms[1,@RM] WONo = Parms[1,@RM]
StepNo = Parms[COL2()+1,@RM] StepNo = Parms[COL2()+1,@RM]
ReactNo = Parms[COL2()+1,@RM] ReactNo = Parms[COL2()+1,@RM]
@ -236,9 +218,6 @@ obj_Tables('WriteOnlyRec',otParms) ;* Done with updates to the WO_REA
Result = Log Result = Log
EndTick = GetTickCount()
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
RETURN RETURN

View File

@ -1,8 +1,7 @@
Compile function Override_Log_Services(@Service, @Params) Compile function Override_Log_Services(@Service, @Params)
#pragma precomp SRP_PreCompiler #pragma precomp SRP_PreCompiler
$Insert SERVICE_SETUP $insert LOGICAL
$insert APP_INSERTS
$Insert OVERRIDE_LOG_EQUATES $Insert OVERRIDE_LOG_EQUATES
Declare function Datetime, NextKey, Error_Services, SRP_Datetime Declare function Datetime, NextKey, Error_Services, SRP_Datetime
@ -23,10 +22,9 @@ Options OVERRIDE_TYPES = 'ROTR_BLOCK,UNSIGN,CLEAN_INSP,REACTOR_PROVE_IN,REAC
Service Create(Table, Key, OverrideUser, OverrideComment, OverrideType=OVERRIDE_TYPES, OverrideCause='') Service Create(Table, Key, OverrideUser, OverrideComment, OverrideType=OVERRIDE_TYPES, OverrideCause='')
ErrorMsg = ''
RecKey = '' RecKey = ''
for each TableName in Table using @VM setting TablePos for each TableName in Table using @VM setting TablePos
RecKey = Nextkey('OVERRIDE_LOG') RecKey<1,-1> = Nextkey('OVERRIDE_LOG')
orRec = '' orRec = ''
orRec<OVERRIDE_LOG_TABLE$> = Table<1, TablePos> orRec<OVERRIDE_LOG_TABLE$> = Table<1, TablePos>
orRec<OVERRIDE_LOG_KEY$> = Key<1, TablePos> orRec<OVERRIDE_LOG_KEY$> = Key<1, TablePos>
@ -47,7 +45,6 @@ Service Create(Table, Key, OverrideUser, OverrideComment, OverrideType=OVERRIDE_
End Service End Service
Service GetOverrideLogKeys(EntityId, Table, Type, User, DateTimeFrom, DateTimeTo) Service GetOverrideLogKeys(EntityId, Table, Type, User, DateTimeFrom, DateTimeTo)
If DateTimeFrom EQ '' OR Not(Num(DateTimeFrom)) Or DateTimeFrom GT DateTimeTo then If DateTimeFrom EQ '' OR Not(Num(DateTimeFrom)) Or DateTimeFrom GT DateTimeTo then
@ -80,6 +77,7 @@ Service GetOverrideLogKeys(EntityId, Table, Type, User, DateTimeFrom, DateTimeTo
Error_Services('Add', 'Error in ' : service : ' unable to open OVERRIDE_LOG dictionary.') Error_Services('Add', 'Error in ' : service : ' unable to open OVERRIDE_LOG dictionary.')
end end
Response = keylist Response = keylist
end service end service

View File

@ -143,7 +143,7 @@ Declare subroutine RTI_Set_Debugger, Database_Services, Btree.Extract, Extract_
Declare subroutine Set_Status, Sleepery, Winyield, Yield, SRP_COM, QA_Services, Logging_Services, Obj_RDS Declare subroutine Set_Status, Sleepery, Winyield, Yield, SRP_COM, QA_Services, Logging_Services, Obj_RDS
Declare subroutine Validate, obj_WO_Mat, obj_WO_Mat_Log, obj_React_Status, Record_Lock, obj_React_State, obj_Post_Log Declare subroutine Validate, obj_WO_Mat, obj_WO_Mat_Log, obj_React_Status, Record_Lock, obj_React_State, obj_Post_Log
Declare subroutine RDS_Services, obj_WO_React, RDS_React_Run, Signature_Services, SQL_Services, SRP_Stopwatch Declare subroutine RDS_Services, obj_WO_React, RDS_React_Run, Signature_Services, SQL_Services, SRP_Stopwatch
Declare subroutine Override_Services, Reactor_Services, Lot_Services, Mona_Services Declare subroutine Override_Services, Reactor_Services, Lot_Services
Declare function SRP_Sort_Array, Metrology_Services, obj_RDS_Test, obj_Test_Point_Map, Database_Services Declare function SRP_Sort_Array, Metrology_Services, obj_RDS_Test, obj_Test_Point_Map, Database_Services
Declare function Work_Order_Services, SRP_JSON, Logging_Services, Environment_Services, SRP_Trim, Error_Services Declare function Work_Order_Services, SRP_JSON, Logging_Services, Environment_Services, SRP_Trim, Error_Services
Declare function Min, Max, SRPSendMail, Btree.Extract, GetTickCount, HTTPClient_Services, Obj_RDS, SQL_Services Declare function Min, Max, SRPSendMail, Btree.Extract, GetTickCount, HTTPClient_Services, Obj_RDS, SQL_Services
@ -177,13 +177,6 @@ LogFilename = LogDate[7, 4] : '-' : LogDate[1, 2] : '-' : LogDate[4, 2] :
Headers = 'Logging DTM' : @FM : 'User' : @FM : 'CassNo' : @FM : 'RDSNo' : @FM : 'Load DTM' : @FM : 'Service' : @FM : 'Notes' Headers = 'Logging DTM' : @FM : 'User' : @FM : 'CassNo' : @FM : 'RDSNo' : @FM : 'Load DTM' : @FM : 'Service' : @FM : 'Notes'
objReactStatusLog = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, Comma$, Headers, '', False$, False$) objReactStatusLog = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, Comma$, Headers, '', False$, False$)
IsProd = Environment_Services('IsProd')
If IsProd EQ True$ then
MonaResource = 'GRP_OPENINSIGHT_MES_OP_FE_QASERVICES'
end else
MonaResource = 'GRP_OPENINSIGHT_MES_OP_FE_DEV_QASERVICES'
end
GoToService else GoToService else
Error_Services('Set', Service : ' is not a valid service request within the ' : ServiceModule : ' services module.') Error_Services('Set', Service : ' is not a valid service request within the ' : ServiceModule : ' services module.')
end end
@ -236,6 +229,12 @@ Service CalculateHgCVData(Datapoints)
Min = Min(Min, DataPoint) Min = Min(Min, DataPoint)
Max = Max(Max, DataPoint) Max = Max(Max, DataPoint)
// Edge Mean Delta // Edge Mean Delta
* If Index GE 6 AND Index LE 9 then
* Delta1 = Delta1 + DataPoint
* end
* If Index GE 2 AND Index LE 5 then
* Delta2 = Delta2 + DataPoint
* end
end end
// Range % // Range %
Locate Index in RangePoints using ',' setting unusedIndex then Locate Index in RangePoints using ',' setting unusedIndex then
@ -257,15 +256,25 @@ Service CalculateHgCVData(Datapoints)
EdgeMean4mm = Edge4mmSum / 4 EdgeMean4mm = Edge4mmSum / 4
EdgeMean10mm = Edge10mmSum / 4 EdgeMean10mm = Edge10mmSum / 4
If EdgeMean10mm GT 0 then If EdgeMean10mm GT 0 then
* Delta1Avg = Delta1/4
* Delta2Avg = Delta2/4
EdgeMeanDelta = ( (Edge4mmSum - Edge10mmSum) / Edge10mmSum) * 100 ; // Changed divisor to Delta2Avg to match SPC - DJS EdgeMeanDelta = ( (Edge4mmSum - Edge10mmSum) / Edge10mmSum) * 100 ; // Changed divisor to Delta2Avg to match SPC - DJS
// Range % // Range %
Range = RangeMax - RangeMin Range = RangeMax - RangeMin
NumRangePoints = DCount(RangePoints, ',') NumRangePoints = DCount(RangePoints, ',')
RangeAvg = RangeAvg / NumRangePoints RangeAvg = RangeAvg / NumRangePoints
RangePct = (Range / RangeAvg) * 100 RangePct = (Range / RangeAvg) * 100
end
* EdgeMeanDelta = OConv(IConv(EdgeMeanDelta, 'MD3L'), 'MD3L')
* RangePct = OConv(IConv(RangePct, 'MD3L'), 'MD3L')
end
// Average
Average = Sum / NumDataPoints Average = Sum / NumDataPoints
* Average = OConv(IConv(Average, 'MD3L'), 'MD3L')
* Min = OConv(IConv(Min, 'MD3L'), 'MD3L')
* Max = OConv(IConv(Max, 'MD3L'), 'MD3L')
FullAvg = '' FullAvg = ''
TotalDataPoints = DCount(DataPoints, @VM) TotalDataPoints = DCount(DataPoints, @VM)
If TotalDataPoints GT 0 then FullAvg = Sum(DataPoints)/DCount(DataPoints, @VM) If TotalDataPoints GT 0 then FullAvg = Sum(DataPoints)/DCount(DataPoints, @VM)
@ -352,6 +361,10 @@ Service PostROTRRequest(RDSNo)
If Flag EQ 0 then If Flag EQ 0 then
If RequestKeyID EQ '' then If RequestKeyID EQ '' then
WOMatKey = Xlate('RDS', RDSNo, 'WO_MAT_KEY', 'X') WOMatKey = Xlate('RDS', RDSNo, 'WO_MAT_KEY', 'X')
FinalSigComp = False$
* FinalSigComp = Signature_Services('FinalSigComp', WOMatKey)
If FinalSigComp NE True$ then
// This is a new request
RequestDate = Date() RequestDate = Date()
RequestTime = Time() RequestTime = Time()
RequestKeyID = RDSNo:'*':RequestDate :'*':RequestTime RequestKeyID = RDSNo:'*':RequestDate :'*':RequestTime
@ -364,6 +377,9 @@ Service PostROTRRequest(RDSNo)
end else end else
ErrorMessage = Error_Services('GetMessage') ErrorMessage = Error_Services('GetMessage')
end end
end else
ErrorMessage = 'FQA signed for RDS ':RDSNo:' ignoring ROTR request.'
end
end else end else
ErrorMessage = 'Duplicate request found for RDS ':RDSNo:'. Request ignored.' ErrorMessage = 'Duplicate request found for RDS ':RDSNo:'. Request ignored.'
end end
@ -494,6 +510,13 @@ Service ProcessROTRRequest(RDSNo)
Swap @FM with ',' in ResponseCopy Swap @FM with ',' in ResponseCopy
LogData<3> = 'ROTR Status response: ':Response LogData<3> = 'ROTR Status response: ':Response
Logging_Services('AppendLog', objErrorLog, LogData, @RM, @FM) Logging_Services('AppendLog', objErrorLog, LogData, @RM, @FM)
* ROTRRec = ''
* ROTRRec<ROTR.REACTOR_STATUS$> = Response<1>
* ROTRRec<ROTR.REACTOR_STATUS_REASON$> = Response<2>
* ROTRRec<ROTR.REACTOR_NCR_COUNT$> = Response<3>
* ROTRRec<ROTR.REACTOR_ZERO_NCR_RUN_COUNT$> = Response<4>
* ROTRRec<ROTR.REACTOR_UCL_EXCEEDED_RUN_COUNT$> = Response<5>
* Database_Services('WriteDataRow', 'ROTR', LWICINo, ROTRRec, True$, False$, True$)
CIRec<CLEAN_INSP_ROTR_REACTOR_STATUS$> = Response<1> CIRec<CLEAN_INSP_ROTR_REACTOR_STATUS$> = Response<1>
CIRec<CLEAN_INSP_ROTR_REACTOR_STATUS_REASON$> = Response<2> CIRec<CLEAN_INSP_ROTR_REACTOR_STATUS_REASON$> = Response<2>
CIRec<CLEAN_INSP_ROTR_REACTOR_NCR_COUNT$> = Response<3> CIRec<CLEAN_INSP_ROTR_REACTOR_NCR_COUNT$> = Response<3>
@ -501,6 +524,7 @@ Service ProcessROTRRequest(RDSNo)
CIRec<CLEAN_INSP_ROTR_REACTOR_UCL_EXCEEDED_RUN_COUNT$> = Response<5> CIRec<CLEAN_INSP_ROTR_REACTOR_UCL_EXCEEDED_RUN_COUNT$> = Response<5>
// Set ROTR Update Flag to trigger CLEAN_INSP_ACTIONS routine (via BASE_MFS). // Set ROTR Update Flag to trigger CLEAN_INSP_ACTIONS routine (via BASE_MFS).
// That routine will recalculate the final ROTR status. // That routine will recalculate the final ROTR status.
* CIRec<CLEAN_INSP_ROTR_UPDATE_FLAG$> = True$
Database_Services('WriteDataRow', 'CLEAN_INSP', LWICINo, CIRec, True$, False$, True$) Database_Services('WriteDataRow', 'CLEAN_INSP', LWICINo, CIRec, True$, False$, True$)
end else end else
ErrorMessage = 'Error in service ':Service:'. Failed to retrieve ROTR status. Error message: ':Error_Services('GetMessage') ErrorMessage = 'Error in service ':Service:'. Failed to retrieve ROTR status. Error message: ':Error_Services('GetMessage')
@ -545,7 +569,6 @@ end service
// //
//---------------------------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------------------------
Service GetROTRStatus(RDSKey) Service GetROTRStatus(RDSKey)
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSKey) RDSRec = Database_Services('ReadDataRow', 'RDS', RDSKey)
WONo = RDSRec<RDS_WO$> WONo = RDSRec<RDS_WO$>
RDSCassNo = RDSRec<RDS_CASS_NO$> RDSCassNo = RDSRec<RDS_CASS_NO$>
@ -1195,7 +1218,12 @@ Service ProcessWaferImageRequests()
Reactor = Xlate('RDS', RDSNo, 'REACTOR', 'X') Reactor = Xlate('RDS', RDSNo, 'REACTOR', 'X')
PSN = Xlate('RDS', RDSNo, 'PROD_SPEC_ID', 'X') PSN = Xlate('RDS', RDSNo, 'PROD_SPEC_ID', 'X')
// Format Wafer Number for SQL Query // Format Wafer Number for SQL Query
WaferNo = Fmt(TrimF(WaferNo), 'R(0)#2') WaferNo = TrimF(WaferNo)
If WaferNo < 10 then
WaferNo = '*0' : WaferNo
end else
WaferNo = '*' : WaferNo
end
Query = "DECLARE @RDS varchar(10) " | Query = "DECLARE @RDS varchar(10) " |
: "DECLARE @RECIPE varchar(30) " | : "DECLARE @RECIPE varchar(30) " |
: "DECLARE @WFRID varchar(10) " | : "DECLARE @WFRID varchar(10) " |
@ -1217,7 +1245,7 @@ Service ProcessWaferImageRequests()
InsertDate = InsertDTM[1, 'F '] InsertDate = InsertDTM[1, 'F ']
Year = Field(InsertDate, '/', 3, 1) Year = Field(InsertDate, '/', 3, 1)
WorkWeek = 'WW':Date_Services('GetWeekNum', InsertDate) WorkWeek = 'WW':Date_Services('GetWeekNum', InsertDate)
PDFPath = WaferMapRoot:'\':Year:'\':WorkWeek:'\':AttachmentID:'\image.pdf' PDFPath = WaferMapRoot:'_\':Year:'\':WorkWeek:'\':AttachmentID:'\image.pdf'
Set_Status(0) Set_Status(0)
PDFFile = '' PDFFile = ''
OSRead PDFFile from PDFPath then OSRead PDFFile from PDFPath then
@ -1264,6 +1292,100 @@ Service ProcessWaferImageRequests()
end service end service
//----------------------------------------------------------------------------------------------------------------------
// ProcessWaferImageRequests
//
// Service that attempts to process all wafer map image requests. These requests are queued in the
// WAFER_IMAGE_REQUESTS table.
//----------------------------------------------------------------------------------------------------------------------
Service ProcessWaferImageRequestsOld()
hSysLists = Database_Services('GetTableHandle', 'SYSLISTS')
Lock hSysLists, ServiceKeyID then
hWaferImageRequests = Database_Services('GetTableHandle', 'WAFER_IMAGE_REQUESTS')
If Error_Services('NoError') then
Sentence = 'SELECT WAFER_IMAGE_REQUESTS WITH RESPONSE_DATE EQ "" BY REQUEST_DATE BY REQUEST_TIME'
Set_Status(0)
RList(Sentence, TARGET_ACTIVELIST$, '', '', '')
EOF = False$
Loop
ReadNext RequestKeyID else EOF = True$
Until EOF
RequestDate = Field(RequestKeyID, '*', 1)
RequestTime = Field(RequestKeyID, '*', 2)
RequestTime = RequestTime / 86400
RequestTime = RequestTime[3, 5]
RequestDTM = RequestDate:'.':RequestTime
CurrDTM = Datetime()
TimeInQueue = CurrDTM - RequestDTM
If TimeInQueue LT 1 then
Lock hWaferImageRequests, RequestKeyID then
EncodedPDF = ''
ResponseBody = ''
RequestRow = Database_Services('ReadDataRow', 'WAFER_IMAGE_REQUESTS', RequestKeyID)
RDSNo = RequestRow<WAFER_IMAGE_REQUESTS.RDS_NO$>
WaferNo = RequestRow<WAFER_IMAGE_REQUESTS.WAFER_NO$>
TencorRecipe = RequestRow<WAFER_IMAGE_REQUESTS.TENCOR_RECIPE$>
ReturnPDF = RequestRow<WAFER_IMAGE_REQUESTS.RETURN_PDF$>
Reactor = Xlate('RDS', RDSNo, 'REACTOR', 'X')
PSN = Xlate('RDS', RDSNo, 'PROD_SPEC_ID', 'X')
// Format Wafer Number for SQL Query
WaferNo = TrimF(WaferNo)
If WaferNo < 10 then
WaferNo = '*0' : WaferNo
end else
WaferNo = '*' : WaferNo
end
Query = "DECLARE @RDS varchar(10) " |
: "DECLARE @RECIPE varchar(30) " |
: "DECLARE @WFRID varchar(10) " |
: "SET @RDS = '":RDSNo:"' " |
: "SET @RECIPE = '":TencorRecipe:"' " |
: "SET @WFRID = '":WaferNo:"' " |
: "SELECT child.AttachmentID " |
: "FROM Metrology.dbo.TencorRunHeader header " |
: "INNER JOIN Metrology.dbo.TencorRunData child on header.id = child.headerid " |
: "WHERE header.rds = @RDS and header.recipe like @RECIPE + '%' and child.slot = @WFRID " |
: "ORDER BY header.insertDate DESC, child.slot ASC"
WaferMapDB = Environment_Services('GetMetrologyProductionPath')
AttachmentID = SQL_Services('GetDataRows', 'SPC', Query)
AttachmentID = SRP_Trim(AttachmentID, 'FB', '{}')
WaferMapRoot = Environment_Services('GetWaferMapProductionPath')
PDFPath = WaferMapRoot:'\':AttachmentID:'\image.pdf'
Set_Status(0)
PDFFile = ''
OSRead PDFFile from PDFPath then
// "Cache" PDF on app server
QA_Services('PostToWaferImageQueue', RDSNo, WaferNo, TencorRecipe, PDFFile)
If ReturnPDF EQ True$ then
ResponseBody = SRP_Encode(PDFFile)
RequestRow<WAFER_IMAGE_REQUESTS.RESPONSE_BODY$> = ResponseBody
RequestRow<WAFER_IMAGE_REQUESTS.RESPONSE_DATE$> = Date()
RequestRow<WAFER_IMAGE_REQUESTS.RESPONSE_TIME$> = Time()
Database_Services('WriteDataRow', 'WAFER_IMAGE_REQUESTS', RequestKeyID, RequestRow, True$)
end else
Database_Services('DeleteDataRow', 'WAFER_IMAGE_REQUESTS', RequestKeyID, True$)
end
end else
ErrorCode = Status()
Error_Services('Add', 'Error retrieving wafer map image for AttachmentID ':AttachmentID)
end
Unlock hWaferImageRequests, RequestKeyID else Null
end
end else
// Delete request because wafer image may never become available.
Database_Services('DeleteDataRow', 'WAFER_IMAGE_REQUESTS', RequestKeyID, True$)
end
Repeat
end
Unlock hSysLists, ServiceKeyID else Null
end
end service
//---------------------------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------------------------
// PostToWaferImageQueue // PostToWaferImageQueue
// //
@ -1631,7 +1753,9 @@ Service ROTRImpactReport()
column = OleGetProperty( xlSht, 'Range' , 'K:K' ) column = OleGetProperty( xlSht, 'Range' , 'K:K' )
OlePutProperty( column , 'ColumnWidth' , '15' ) OlePutProperty( column , 'ColumnWidth' , '15' )
OlePutProperty( column , 'NumberFormat' , '0.0%' ) OlePutProperty( column , 'NumberFormat' , '0.0%' )
end end
end end
end service end service
@ -1678,8 +1802,6 @@ end service
// False$ otherwise. // False$ otherwise.
//---------------------------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------------------------
Service PreEpiSignatureReady(RDSNo, Username, WaferQty, Reactor) Service PreEpiSignatureReady(RDSNo, Username, WaferQty, Reactor)
StartTick = GetTickCount()
MetricName = 'PreEpiSignatureReady'
If (RDSNo EQ '') or (Username EQ '') or (WaferQty EQ '') or (Reactor EQ '') then If (RDSNo EQ '') or (Username EQ '') or (WaferQty EQ '') or (Reactor EQ '') then
ErrorMessage = 'RDSNo, Username, WaferQty, or Reactor not supplied in the ':Service:' service.' ErrorMessage = 'RDSNo, Username, WaferQty, or Reactor not supplied in the ':Service:' service.'
@ -1778,8 +1900,6 @@ Service PreEpiSignatureReady(RDSNo, Username, WaferQty, Reactor)
Response = False$ Response = False$
end end
EndTick = GetTickCount()
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
end service end service
@ -1796,8 +1916,6 @@ end service
// Reponse - True$ if PRE stage was successfully signed, False$ otherwise. // Reponse - True$ if PRE stage was successfully signed, False$ otherwise.
//---------------------------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------------------------
Service SignPreEpiStage(RDSNo, Username, WaferQty, Reactor, ScanEntry) Service SignPreEpiStage(RDSNo, Username, WaferQty, Reactor, ScanEntry)
StartTick = GetTickCount()
MetricName = 'SignPreEpiStage'
Error_Services('Clear') Error_Services('Clear')
If (RDSNo EQ '') or (Username EQ '') or (WaferQty EQ '') or (Reactor EQ '') then If (RDSNo EQ '') or (Username EQ '') or (WaferQty EQ '') or (Reactor EQ '') then
@ -1849,6 +1967,8 @@ Service SignPreEpiStage(RDSNo, Username, WaferQty, Reactor, ScanEntry)
PreEpiSig = RDSRec<RDS_PRE_EPI_SIG$> PreEpiSig = RDSRec<RDS_PRE_EPI_SIG$>
ReactorType = Xlate('RDS', RDSNo, 'REACTOR_TYPE', 'X') ReactorType = Xlate('RDS', RDSNo, 'REACTOR_TYPE', 'X')
// Removing OI_SUPERUSER wrappers to alleviate signature issues. 11/18/19 djs
* IF MemberOf(Username, 'OI_SUPERUSER') THEN
IF ReactorType NE 'EPP' THEN IF ReactorType NE 'EPP' THEN
@ -1874,6 +1994,7 @@ Service SignPreEpiStage(RDSNo, Username, WaferQty, Reactor, ScanEntry)
SigTime = RDSRec<RDS_PRE_EPI_SIG_TIME$> SigTime = RDSRec<RDS_PRE_EPI_SIG_TIME$>
owmParms = WONo:@RM:CassNo:@RM:WOStep:@RM:'VER':@RM:RDSSig:@RM:SigDate:' ':SigTime owmParms = WONo:@RM:CassNo:@RM:WOStep:@RM:'VER':@RM:RDSSig:@RM:SigDate:' ':SigTime
* Sets VER signature * Sets VER signature
* obj_WO_Mat('SetSignature',owmParms)
errCode = '' errCode = ''
IF Get_Status(errCode) THEN IF Get_Status(errCode) THEN
ErrorMsg = 'Process Error: Error calling Obj_WO_Mat("SetSignature") within ':Service:'. Error code: ':errCode ErrorMsg = 'Process Error: Error calling Obj_WO_Mat("SetSignature") within ':Service:'. Error code: ':errCode
@ -1910,6 +2031,8 @@ Service SignPreEpiStage(RDSNo, Username, WaferQty, Reactor, ScanEntry)
END ;* End of check for Reactor Type END ;* End of check for Reactor Type
* END
SigDate = OCONV( Date(), 'D2/' ) SigDate = OCONV( Date(), 'D2/' )
SigTime = OCONV( Time(), 'MTS' ) SigTime = OCONV( Time(), 'MTS' )
@ -1922,6 +2045,7 @@ Service SignPreEpiStage(RDSNo, Username, WaferQty, Reactor, ScanEntry)
owmParms = WONo:@RM:CassNo:@RM:WOStep:@RM:'VER':@RM:Username:@RM:SigDate:' ':SigTime ;* Sets VER signature owmParms = WONo:@RM:CassNo:@RM:WOStep:@RM:'VER':@RM:Username:@RM:SigDate:' ':SigTime ;* Sets VER signature
* obj_WO_Mat('SetSignature',owmParms)
IF Get_Status(errCode) THEN IF Get_Status(errCode) THEN
ErrorMessage = 'Process Error: Error calling obj_WO_Mat("SetSignature"). Error code: ':errCode ErrorMessage = 'Process Error: Error calling obj_WO_Mat("SetSignature"). Error code: ':errCode
Error_Services('Set', ErrorMessage) Error_Services('Set', ErrorMessage)
@ -1975,8 +2099,6 @@ Service SignPreEpiStage(RDSNo, Username, WaferQty, Reactor, ScanEntry)
Response = False$ Response = False$
end end
EndTick = GetTickCount()
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
end service end service
@ -1996,8 +2118,6 @@ end service
// False$ otherwise. // False$ otherwise.
//---------------------------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------------------------
Service LoadSignatureReady(RDSNo, Username, WaferQty, LLSide, PreFlag, ReactNoOpt) Service LoadSignatureReady(RDSNo, Username, WaferQty, LLSide, PreFlag, ReactNoOpt)
StartTick = GetTickCount()
MetricName = 'LoadSignatureReady'
Error_Services('Clear') Error_Services('Clear')
If (RDSNo EQ '') or (Username EQ '') or (WaferQty EQ '') then If (RDSNo EQ '') or (Username EQ '') or (WaferQty EQ '') then
@ -2090,8 +2210,16 @@ Service LoadSignatureReady(RDSNo, Username, WaferQty, LLSide, PreFlag, ReactNoOp
return return
end end
//Added 8/18/2021 JRO - checks to make sure recipe limits aren't oos
* IF ParamOutOfSpec then
* IF Supplement NE True$ then
* ErrorMsg = 'Process Error: Recipe parameters are out of spec and no supplement has been set.'
* Error_Services('Set', ErrorMsg)
* Response = False$
* return
* end
* end
Locate True$ in ParamOutOfSpec using @VM setting oPos then Locate True$ in ParamOutOfSpec using @VM setting oPos then
IF Supplement NE True$ then IF Supplement NE True$ then
ErrorMsg = 'Process Error: Recipe parameters are out of spec and no supplement has been set.' ErrorMsg = 'Process Error: Recipe parameters are out of spec and no supplement has been set.'
Error_Services('Set', ErrorMsg) Error_Services('Set', ErrorMsg)
@ -2106,6 +2234,13 @@ Service LoadSignatureReady(RDSNo, Username, WaferQty, LLSide, PreFlag, ReactNoOp
return return
end end
* IF (ReactorType = 'ASM+' OR ReactorType = 'HTR') AND (LoadLockVal EQ '') THEN
* ErrorMsg = 'Process Error: Load Lock Side must be set to either Left or Right before signing.'
* Error_Services('Set', ErrorMsg)
* Response = False$
* return
* END
//Added JRO 3/16/2021 //Added JRO 3/16/2021
//Load Lock Required Check //Load Lock Required Check
LoadLockReq = Xlate('REACTOR', Reactor, REACTOR_PICK_PLACE$, 'X'); LoadLockReq = Xlate('REACTOR', Reactor, REACTOR_PICK_PLACE$, 'X');
@ -2179,6 +2314,8 @@ Service LoadSignatureReady(RDSNo, Username, WaferQty, LLSide, PreFlag, ReactNoOp
Return Return
END END
* IF ReactorType NE 'EPP' THEN
If PreFlag EQ True$ then If PreFlag EQ True$ then
// PRE and LOAD stages are being signed together. This is usually because the operator is loading a reactor // PRE and LOAD stages are being signed together. This is usually because the operator is loading a reactor
// using the barcode scanner, which attempts to sign both stages at once to save time. // using the barcode scanner, which attempts to sign both stages at once to save time.
@ -2200,6 +2337,27 @@ Service LoadSignatureReady(RDSNo, Username, WaferQty, LLSide, PreFlag, ReactNoOp
Return Return
end end
! Deprecated 11/20/2019
* Set_Status(0)
* obj_WO_Mat('CheckSigOrder',WONo:'*':CassNo:@RM:WOStep:'LOAD')
* IF Get_Status(errCode) THEN
* ErrorMsg = 'Process Error: Error calling obj_WO_Mat("CheckSigOrder"). Error code: ':errCode
* Error_Services('Set', ErrorMsg)
* Response = False$
* RETURN
* END
* END ;* End of check for Epi Pro
// Deprecated in favor of stage specific supplements
* SupplAckReq = Xlate('RDS', RDSNo, 'SUPPL_ACK_REQ', 'X')
* IF (SupplAckReq EQ True$) then
* ErrorMsg = 'The RDS Supplement must be acknowledged before the load operation can be signed.'
* Error_Services('Set', ErrorMsg)
* Response = False$
* Return
* END
SigDate = RDSRec<RDS_PRE_EPI_SIG_DATE$> SigDate = RDSRec<RDS_PRE_EPI_SIG_DATE$>
SigTime = RDSrec<RDS_PRE_EPI_SIG_TIME$> SigTime = RDSrec<RDS_PRE_EPI_SIG_TIME$>
PreCINo = Xlate('RDS', RDSNo, 'PRE_CI_NO', 'X') PreCINo = Xlate('RDS', RDSNo, 'PRE_CI_NO', 'X')
@ -2244,13 +2402,9 @@ Service LoadSignatureReady(RDSNo, Username, WaferQty, LLSide, PreFlag, ReactNoOp
Response = False$ Response = False$
end end
EndTick = GetTickCount()
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
end service end service
Service LoadExtra1stReady(RDSNo) Service LoadExtra1stReady(RDSNo)
Response = False$ Response = False$
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo) RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo)
StandardLoadSignature = RDSRec<RDS_OPERATOR_IN$> StandardLoadSignature = RDSRec<RDS_OPERATOR_IN$>
@ -2262,12 +2416,9 @@ Service LoadExtra1stReady(RDSNo)
If StandardLoadSignature NE '' AND UnloadExtra1Signature NE '' AND LoadExtra1Signature EQ '' And LoadExtra2Signature EQ ''AND UnloadExtra2Signature EQ '' and StandardUnloadSignature EQ '' then If StandardLoadSignature NE '' AND UnloadExtra1Signature NE '' AND LoadExtra1Signature EQ '' And LoadExtra2Signature EQ ''AND UnloadExtra2Signature EQ '' and StandardUnloadSignature EQ '' then
Response = True$ Response = True$
end end
end service end service
Service UnsignLoadExtra1stReady(RDSNo) Service UnsignLoadExtra1stReady(RDSNo)
Response = False$ Response = False$
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo) RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo)
StandardLoadSignature = RDSRec<RDS_OPERATOR_IN$> StandardLoadSignature = RDSRec<RDS_OPERATOR_IN$>
@ -2284,9 +2435,7 @@ Service UnsignLoadExtra1stReady(RDSNo)
end service end service
Service LoadExtra2ndReady(RDSNo) Service LoadExtra2ndReady(RDSNo)
Response = False$ Response = False$
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo) RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo)
StandardLoadSignature = RDSRec<RDS_OPERATOR_IN$> StandardLoadSignature = RDSRec<RDS_OPERATOR_IN$>
@ -2298,12 +2447,9 @@ Service LoadExtra2ndReady(RDSNo)
If StandardLoadSignature NE '' AND UnloadExtra1Signature NE '' AND LoadExtra1Signature NE '' AND UnloadExtra2Signature NE '' And LoadExtra2Signature EQ '' and StandardUnloadSignature EQ '' then If StandardLoadSignature NE '' AND UnloadExtra1Signature NE '' AND LoadExtra1Signature NE '' AND UnloadExtra2Signature NE '' And LoadExtra2Signature EQ '' and StandardUnloadSignature EQ '' then
Response = True$ Response = True$
end end
end service end service
Service UnsignLoadExtra2ndReady(RDSNo) Service UnsignLoadExtra2ndReady(RDSNo)
Response = False$ Response = False$
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo) RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo)
StandardLoadSignature = RDSRec<RDS_OPERATOR_IN$> StandardLoadSignature = RDSRec<RDS_OPERATOR_IN$>
@ -2317,10 +2463,8 @@ Service UnsignLoadExtra2ndReady(RDSNo)
Response = True$ Response = True$
end end
end end
end service end service
//---------------------------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------------------------
// SignLoadStage // SignLoadStage
// //
@ -2334,8 +2478,6 @@ end service
// False$ otherwise. // False$ otherwise.
//---------------------------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------------------------
Service SignLoadStage(RDSNo, Username, WaferQty, LLSide, ScanEntry) Service SignLoadStage(RDSNo, Username, WaferQty, LLSide, ScanEntry)
StartTick = GetTickCount()
MetricName = 'SignLoadStage'
Error_Services('Clear') Error_Services('Clear')
If (RDSNo EQ '') or (Username EQ '') or (WaferQty EQ '') then If (RDSNo EQ '') or (Username EQ '') or (WaferQty EQ '') then
@ -2543,8 +2685,6 @@ Service SignLoadStage(RDSNo, Username, WaferQty, LLSide, ScanEntry)
Response = False$ Response = False$
end end
EndTick = GetTickCount()
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
end service end service
@ -2560,8 +2700,6 @@ end service
// False$ otherwise. // False$ otherwise.
//---------------------------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------------------------
Service UnloadSignatureReady(RDSNo, Username, Reactor) Service UnloadSignatureReady(RDSNo, Username, Reactor)
StartTick = GetTickCount()
MetricName = 'UnloadSignatureReady'
If (RDSNo EQ '') or (Username EQ '') or (Reactor EQ '') then If (RDSNo EQ '') or (Username EQ '') or (Reactor EQ '') then
ErrorMsg = 'RDSNo or Username or Reactor not supplied in the ':Service:' service.' ErrorMsg = 'RDSNo or Username or Reactor not supplied in the ':Service:' service.'
@ -2611,6 +2749,10 @@ Service UnloadSignatureReady(RDSNo, Username, Reactor)
end end
ReactorType = XLATE('RDS',RDSNo,'REACTOR_TYPE','X') ReactorType = XLATE('RDS',RDSNo,'REACTOR_TYPE','X')
* IF ReactorType NE 'EPP' THEN
If ReactorType EQ 'EPP' then If ReactorType EQ 'EPP' then
WOMatKey = '' WOMatKey = ''
end else end else
@ -2623,6 +2765,24 @@ Service UnloadSignatureReady(RDSNo, Username, Reactor)
return return
end end
* END ELSE
*
* ReactRunRec = XLATE('REACT_RUN',RDSNo,'','X')
* LOCATE 'LWI' IN ReactRunRec<REACT_RUN_CI_STAGE$> USING @VM SETTING Pos THEN
* CINo = ReactRunRec<REACT_RUN_CI_NO$>
* Actions = obj_Clean_Insp('GetActions',CINo)
* LOCATE 'Inspection' IN Actions<ACTION$ACTIONS> USING @FM SETTING Pos THEN
* IF Actions<ACTION$SIGS,1> = '' THEN
* ErrorMsg = 'Process Error: A Wafer Inspection is required and has not been completed.'
* Error_Services('Set', ErrorMsg)
* Response = False$
* return
* END
* END
* END
*
* END ;* End of check for EpiPRO (EPP) reactor type
LWIInstAckReq = Xlate('RDS', RDSNo, 'LWI_INST_ACK_REQ', 'X') LWIInstAckReq = Xlate('RDS', RDSNo, 'LWI_INST_ACK_REQ', 'X')
If LWIInstAckReq EQ True$ then If LWIInstAckReq EQ True$ then
ErrorMsg = 'The LWI stage engineering instructions must be acknowledged before the load operation can be signed.' ErrorMsg = 'The LWI stage engineering instructions must be acknowledged before the load operation can be signed.'
@ -2639,6 +2799,7 @@ Service UnloadSignatureReady(RDSNo, Username, Reactor)
return return
end end
! Todo: We will have to define special logic for the barcode application to handle extra loads and unloads.
* Check for extra unloads without corresponding extra load * Check for extra unloads without corresponding extra load
IF RDSRec<RDS_OP_OUT_EX1_DATE$> <> '' THEN IF RDSRec<RDS_OP_OUT_EX1_DATE$> <> '' THEN
IF RDSRec<RDS_OP_IN_EX2_DATE$> = '' THEN IF RDSRec<RDS_OP_IN_EX2_DATE$> = '' THEN
@ -2708,13 +2869,9 @@ Service UnloadSignatureReady(RDSNo, Username, Reactor)
Response = False$ Response = False$
end end
EndTick = GetTickCount()
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
end service end service
Service UnloadExtra1stReady(RDSNo) Service UnloadExtra1stReady(RDSNo)
Response = False$ Response = False$
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo) RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo)
StandardLoadSignature = RDSRec<RDS_OPERATOR_IN$> StandardLoadSignature = RDSRec<RDS_OPERATOR_IN$>
@ -2726,12 +2883,9 @@ Service UnloadExtra1stReady(RDSNo)
If StandardLoadSignature NE '' AND UnloadExtra1Signature EQ '' AND LoadExtra1Signature EQ '' AND UnloadExtra2Signature EQ '' And LoadExtra2Signature eq '' and StandardUnloadSignature EQ '' then If StandardLoadSignature NE '' AND UnloadExtra1Signature EQ '' AND LoadExtra1Signature EQ '' AND UnloadExtra2Signature EQ '' And LoadExtra2Signature eq '' and StandardUnloadSignature EQ '' then
Response = True$ Response = True$
end end
end service end service
Service UnloadExtra2ndReady(RDSNo) Service UnloadExtra2ndReady(RDSNo)
Response = False$ Response = False$
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo) RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo)
StandardLoadSignature = RDSRec<RDS_OPERATOR_IN$> StandardLoadSignature = RDSRec<RDS_OPERATOR_IN$>
@ -2743,12 +2897,9 @@ Service UnloadExtra2ndReady(RDSNo)
If StandardLoadSignature NE '' AND UnloadExtra1Signature NE '' AND LoadExtra1Signature NE '' And LoadExtra2Signature EQ ''AND UnloadExtra2Signature EQ '' and StandardUnloadSignature EQ '' then If StandardLoadSignature NE '' AND UnloadExtra1Signature NE '' AND LoadExtra1Signature NE '' And LoadExtra2Signature EQ ''AND UnloadExtra2Signature EQ '' and StandardUnloadSignature EQ '' then
Response = True$ Response = True$
end end
end service end service
Service UnsignUnloadExtra1stReady(RDSNo) Service UnsignUnloadExtra1stReady(RDSNo)
Response = False$ Response = False$
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo) RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo)
StandardLoadSignature = RDSRec<RDS_OPERATOR_IN$> StandardLoadSignature = RDSRec<RDS_OPERATOR_IN$>
@ -2765,9 +2916,7 @@ Service UnsignUnloadExtra1stReady(RDSNo)
end service end service
Service UnsignUnloadExtra2ndReady(RDSNo) Service UnsignUnloadExtra2ndReady(RDSNo)
Response = False$ Response = False$
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo) RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo)
StandardLoadSignature = RDSRec<RDS_OPERATOR_IN$> StandardLoadSignature = RDSRec<RDS_OPERATOR_IN$>
@ -2781,7 +2930,6 @@ Service UnsignUnloadExtra2ndReady(RDSNo)
Response = True$ Response = True$
end end
end end
end service end service
@ -2796,9 +2944,6 @@ end service
// Response - True$ if UNLOAD stage was successfully signed , False$ otherwise. // Response - True$ if UNLOAD stage was successfully signed , False$ otherwise.
//---------------------------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------------------------
Service SignUnloadStage(RDSNo, Username, ScanEntry) Service SignUnloadStage(RDSNo, Username, ScanEntry)
StartTick = GetTickCount()
MetricName = 'SignUnloadStage'
If (RDSNo EQ '') or (Username EQ '') then If (RDSNo EQ '') or (Username EQ '') then
ErrorMsg = 'RDSNo or Username not supplied in the ':Service:' service.' ErrorMsg = 'RDSNo or Username not supplied in the ':Service:' service.'
Error_Services('Add', ErrorMsg) Error_Services('Add', ErrorMsg)
@ -2871,6 +3016,7 @@ Service SignUnloadStage(RDSNo, Username, ScanEntry)
* 4/30/2013 JCH added parms for merging of two methods * 4/30/2013 JCH added parms for merging of two methods
owmParms = WONo:@RM:CassNo:@RM:WOStep:@RM:'UNLOAD':@RM:Username:@RM:SigDt:' ':SigTm:@RM:ReactID:@RM:ReactWH:@RM:ReactLoc:@RM:Tag owmParms = WONo:@RM:CassNo:@RM:WOStep:@RM:'UNLOAD':@RM:Username:@RM:SigDt:' ':SigTm:@RM:ReactID:@RM:ReactWH:@RM:ReactLoc:@RM:Tag
* obj_WO_Mat('SetSignature',owmParms)
IF Get_Status(errCode) THEN IF Get_Status(errCode) THEN
ErrorMsg = 'Process Error: Error calling Obj_WO_Mat("SetSignature") within the ':Service:' service' ErrorMsg = 'Process Error: Error calling Obj_WO_Mat("SetSignature") within the ':Service:' service'
@ -2904,6 +3050,9 @@ Service SignUnloadStage(RDSNo, Username, ScanEntry)
obj_React_Status('CassUnload',Reactor:@RM:WONo:@RM:CassNo:@RM:UnloadDTM:@RM:RDSNo) obj_React_Status('CassUnload',Reactor:@RM:WONo:@RM:CassNo:@RM:UnloadDTM:@RM:RDSNo)
IF Get_Status(errCode) THEN IF Get_Status(errCode) THEN
* ErrorMsg = 'Process Error: Error calling Obj_React_Status("CassUnload") within the ':Service:' service'
* Error_Services('Add', ErrorMsg)
* Response = False$
LogData = '' LogData = ''
LogData<1> = LoggingDTM LogData<1> = LoggingDTM
LogData<2> = @User4 LogData<2> = @User4
@ -2919,6 +3068,7 @@ Service SignUnloadStage(RDSNo, Username, ScanEntry)
InCassettes = RDSRec<RDS_IN_CASS_NO$> InCassettes = RDSRec<RDS_IN_CASS_NO$>
InCassettes = SRP_Array('Clean', InCassettes, 'TrimAndMakeUnique', @VM) InCassettes = SRP_Array('Clean', InCassettes, 'TrimAndMakeUnique', @VM)
obj_React_Status('ReactorUnload',Reactor:@RM:WONo:@RM:InCassettes:@RM:UnloadDTM:@RM:RDSNo) obj_React_Status('ReactorUnload',Reactor:@RM:WONo:@RM:InCassettes:@RM:UnloadDTM:@RM:RDSNo)
//Reactor_Services('IncrementWfrMetrics', RDSNo)
end end
RDSRec<RDS_OPERATOR_OUT$> = SigBy RDSRec<RDS_OPERATOR_OUT$> = SigBy
@ -2991,8 +3141,6 @@ Service SignUnloadStage(RDSNo, Username, ScanEntry)
Response = False$ Response = False$
end end
EndTick = GetTickCount()
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
end service end service
@ -3327,9 +3475,97 @@ Service SignFQAStage(RDSNo, Username)
NEXT Index NEXT Index
END END
**********************************************
* Verify the FlatFinder information *
**********************************************
EpiPartNo = {EPI_PART_NO}
WaferSize = Xlate('EPI_PART', EpiPartNo, 'SUB_WAFER_SIZE', 'X')
WaferSizeInch = Field(WaferSize, ' ', 3, 1)
CustNo = {CUST_NO}
CompanyRow = Xlate('COMPANY', CustNo, '', 'X')
WafersOut = {WFRS_OUT}
Begin Case
Case WaferSizeInch = '6'
WaferFlatSizeInches = CompanyRow<COMPANY_WAFER_FLAT_WAFER_SIZE_INCH$>
WaferFlatLengthMins = Oconv(CompanyRow<COMPANY_WAFER_FLAT_LENGTH_MIN$>, 'MD1')
WaferFlatLengthMaxes = Oconv(CompanyRow<COMPANY_WAFER_FLAT_LENGTH_MAX$>, 'MD1')
Locate WaferSizeInch in WaferFlatSizeInches using @VM setting vPos then
WaferFlatLengthMin = WaferFlatLengthMins<0, vPos>
WaferFlatLengthMax = WaferFlatLengthMaxes<0, vPos>
end else
WaferFlatLengthMin = ''
WaferFlatLengthMax = ''
end
// Get FlatFinder Read Value
* FlatFinderWafersQty = {FLATFINDER_WAFER_CNT}
FlatFinderWaferLength = {FLATFINDER_FLAT_LENGTH}
***************************************
* FlatFinder - Wafers Quatity Section *
***************************************
* If (FlatFinderWafersQty NE '') then
* If (FlatFinderWafersQty NE WafersOut) then
* ErrorMsg = 'Unable to sign FQA because Flat Finder and Wafers Out quantities do not match.'
* Error_Services('Add', ErrorMsg)
* return
* end
* end else
* ErrorMsg = 'Unable to sign FQA because the Flat Finder quantity is missing.'
* Error_Services('Add', ErrorMsg)
* return
* end
************************************
* FlatFinder - Flat Length Section *
************************************
If (WaferFlatLengthMin NE '') AND (WaferFlatLengthMax NE '') then
If (FlatFinderWaferLength NE '') then
If (FlatFinderWaferLength GE WaferFlatLengthMin) AND (FlatFinderWaferLength LE WaferFlatLengthMax) then
end else
ErrorMsg = 'Unable to sign FQA because Flat Finder wafer lengths are out of bounds.'
Error_Services('Add', ErrorMsg)
return
end
end else
ErrorMsg = 'Unable to sign FQA because the Flat Finder wafer length is missing.'
Error_Services('Add', ErrorMsg)
return
end
end
Case WaferSizeInch = '8'
// Get NotchFinder Read Value
* NotchFinderWafersQty = {FLATFINDER_WAFER_CNT}
*
* ***************************************
* * NotchFinder - Wafers Quatity Section *
* ***************************************
* If (NotchFinderWafersQty NE '') then
* If (NotchFinderWafersQty NE WafersOut) then
* ErrorMsg = 'Unable to sign FQA because Notch Finder and Wafers Out quantities do not match.'
* Error_Services('Add', ErrorMsg)
* return
* end
* end else
* ErrorMsg = 'Unable to sign FQA because the Notch Finder quantity is missing.'
* Error_Services('Add', ErrorMsg)
* return
* end
Case 1
End Case
************************* *************************
* Verify Wafer Quantity * * Verify Wafer Quantity *
************************* *************************
! The barcode application will need to inform the user that an override is required. We will return an error for
! now. Once the user is informed, a LEAD or SUPERVISOR can scan their badge to override and complete the scan.
CassSchedWafers = {CASS_SHIP_QTY} CassSchedWafers = {CASS_SHIP_QTY}
WafersOut = {WFRS_OUT} WafersOut = {WFRS_OUT}
@ -3349,9 +3585,13 @@ Service SignFQAStage(RDSNo, Username)
end end
********************************* *********************************
* Verify NCR total >= USL Fails * * Verify NCR total >= USL Fails *
********************************* *********************************
! The barcode application will need to inform the user that an override is required. We will return an error for
! now. Once the user is informed, a LEAD or SUPERVISOR can scan their badge to override and complete the scan.
If Username EQ 'FRANCOIS_R' then
NCRStatus = QA_Services('GetNCRStatus', RDSNo) NCRStatus = QA_Services('GetNCRStatus', RDSNo)
If NCRStatus EQ False$ then If NCRStatus EQ False$ then
If NOT( MemberOf(Username, 'LEAD') OR MemberOf(Username, 'SUPERVISOR') ) then If NOT( MemberOf(Username, 'LEAD') OR MemberOf(Username, 'SUPERVISOR') ) then
@ -3361,6 +3601,7 @@ Service SignFQAStage(RDSNo, Username)
return return
end end
end end
end
************************* *************************
* Verify if Shift exist * * Verify if Shift exist *
@ -3422,8 +3663,9 @@ Service SignFQAStage(RDSNo, Username)
Next Test Next Test
****************************************** ******************************************
* Verify Unload Stage QA Metrology Tests * * Verify Unload Stage QA Metrology Tests * On hold until approved for release to production
****************************************** ******************************************
If Username EQ 'FRANCOIS_R' then
WONo = {WO} WONo = {WO}
CassNo = {CASS_NO} CassNo = {CASS_NO}
WOMatQAKey = WONo : '*' : CassNo WOMatQAKey = WONo : '*' : CassNo
@ -3435,6 +3677,7 @@ Service SignFQAStage(RDSNo, Username)
Error_Services('Add', ErrorMsg) Error_Services('Add', ErrorMsg)
return return
end end
end
******************************************* *******************************************
* Verify if all steps have been completed * * Verify if all steps have been completed *
@ -3507,6 +3750,8 @@ Service SignFQAStage(RDSNo, Username)
;* 4/30/2013 JCH added parms for merging of two methods ;* 4/30/2013 JCH added parms for merging of two methods
owmParms = WONo:@RM:CassNo:@RM:WOStep:@RM:'QA':@RM:Username:@RM:SigDt:' ':SigTm:@RM:ToolID:@RM:WHCd:@RM:LocCd:@RM:Tag owmParms = WONo:@RM:CassNo:@RM:WOStep:@RM:'QA':@RM:Username:@RM:SigDt:' ':SigTm:@RM:ToolID:@RM:WHCd:@RM:LocCd:@RM:Tag
* obj_WO_Mat('SetSignature',owmParms) ; * * * * * S I G N A T U R E * * * * * *
IF Get_Status(errCode) THEN IF Get_Status(errCode) THEN
ErrorMsg = 'Error calling Obj_WO_Mat("SetSignature") within ':Service:'. Error code: ':errCode ErrorMsg = 'Error calling Obj_WO_Mat("SetSignature") within ':Service:'. Error code: ':errCode
Error_Services('Add', ErrorMsg) Error_Services('Add', ErrorMsg)
@ -3643,4 +3888,3 @@ ClearCursors:
return return

View File

@ -254,6 +254,8 @@ Event SIGN_BUTTON.CLICK()
end end
RDSNo = Get_Property(@Window : '.RDS_NO','DEFPROP') RDSNo = Get_Property(@Window : '.RDS_NO','DEFPROP')
WCCheckEnabled = Xlate('APP_INFO', 'WAFER_COUNTER_CHECK', '', 'X')
If WCCheckEnabled then
**************************************** ****************************************
* Verify the Wafer Counter information * * Verify the Wafer Counter information *
**************************************** ****************************************
@ -272,6 +274,7 @@ Event SIGN_BUTTON.CLICK()
ErrMsg('Unable to sign FQA because the Wafer Counter quantity is missing.') ErrMsg('Unable to sign FQA because the Wafer Counter quantity is missing.')
RETURN 0 RETURN 0
end end
end
*********************************** ***********************************
* Verify Scheduled Wafer Quantity * * Verify Scheduled Wafer Quantity *
@ -443,6 +446,10 @@ Event SIGN_BUTTON.CLICK()
****************************************** ******************************************
* Verify Unload Stage QA Metrology Tests * * Verify Unload Stage QA Metrology Tests *
****************************************** ******************************************
DevelopmentFlag = Xlate('DEVELOPMENT', 'HGCV', 'STATUS', 'X')
If (DevelopmentFlag EQ True$) then
WONo = Get_Property(@WINDOW:'.WO','DEFPROP') WONo = Get_Property(@WINDOW:'.WO','DEFPROP')
CassNo = Get_Property(@WINDOW:'.CASS_NO','DEFPROP') CassNo = Get_Property(@WINDOW:'.CASS_NO','DEFPROP')
WOMatQAKey = WONo : '*' : CassNo WOMatQAKey = WONo : '*' : CassNo
@ -458,6 +465,7 @@ Event SIGN_BUTTON.CLICK()
ErrMsg(ErrorMsg) ErrMsg(ErrorMsg)
Return Return
end end
end
******************************************* *******************************************
* Verify if all steps have been completed * * Verify if all steps have been completed *

View File

@ -115,7 +115,7 @@ AutoDisplayErrors = FALSE$ ; // Set this to True$ when debugging so all erro
Declare subroutine SRP_Stopwatch, Error_Services, obj_Tables, Metrology_Services, obj_RDS_Test, SRP_JSON, Logging_Services Declare subroutine SRP_Stopwatch, Error_Services, obj_Tables, Metrology_Services, obj_RDS_Test, SRP_JSON, Logging_Services
Declare subroutine RTI_Set_Debugger, Database_Services, Btree.Extract, Extract_SI_Keys, Obj_WO_Mat, Obj_WO_Mat_Log Declare subroutine RTI_Set_Debugger, Database_Services, Btree.Extract, Extract_SI_Keys, Obj_WO_Mat, Obj_WO_Mat_Log
Declare subroutine Dialog_Box, Obj_Notes, RList, Set_Status, Errmsg, Obj_React_Status , Reactor_Services Declare subroutine Dialog_Box, Obj_Notes, RList, Set_Status, Errmsg, Obj_React_Status , Reactor_Services
Declare subroutine Rds_Services, Obj_Post_Log, Mona_Services Declare subroutine Rds_Services, Obj_Post_Log
Declare function SRP_Sort_Array, Metrology_Services, obj_RDS_Test, obj_Test_Point_Map, Database_Services Declare function SRP_Sort_Array, Metrology_Services, obj_RDS_Test, obj_Test_Point_Map, Database_Services
Declare function Work_Order_Services, SRP_JSON, Logging_Services, Environment_Services, SRP_Trim, Error_Services Declare function Work_Order_Services, SRP_JSON, Logging_Services, Environment_Services, SRP_Trim, Error_Services
Declare function Memberof, Obj_WO_Mat, Obj_WO_Mat_Log, SRP_Array, DateTime, Dialog_Box, obj_Prod_Spec Declare function Memberof, Obj_WO_Mat, Obj_WO_Mat_Log, SRP_Array, DateTime, Dialog_Box, obj_Prod_Spec
@ -131,13 +131,6 @@ Headers = 'Logging DTM':@FM:'Ctrl':@FM:'Load/Calculate Time'
objCtrlLog = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, COMMA$, Headers, '', False$, False$) objCtrlLog = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, COMMA$, Headers, '', False$, False$)
LoggingDTM = LogDate : ' ' : LogTime ; // Logging DTM LoggingDTM = LogDate : ' ' : LogTime ; // Logging DTM
IsProd = Environment_Services('IsProd')
If IsProd EQ True$ then
MonaResource = 'GRP_OPENINSIGHT_MES_OP_FE_RDSSERVICES'
end else
MonaResource = 'GRP_OPENINSIGHT_MES_OP_FE_DEV_RDSSERVICES'
end
GoToService else GoToService else
Error_Services('Set', Service : ' is not a valid service request within the ' : ServiceModule : ' services module.') Error_Services('Set', Service : ' is not a valid service request within the ' : ServiceModule : ' services module.')
end end
@ -233,8 +226,6 @@ End Service
// to an RDS record. // to an RDS record.
//---------------------------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------------------------
Service AddComment(RDSNo, Comment, UsernameOpt) Service AddComment(RDSNo, Comment, UsernameOpt)
StartTick = GetTickCount()
MetricName = 'AddComment'
RDSRow = Database_Services('ReadDataRow', 'RDS', RDSNo) RDSRow = Database_Services('ReadDataRow', 'RDS', RDSNo)
Username = @USER4 Username = @USER4
@ -257,8 +248,6 @@ Service AddComment(RDSNo, Comment, UsernameOpt)
oblParms := "TOP" :@VM: "TOP" :@VM: "TOP" oblParms := "TOP" :@VM: "TOP" :@VM: "TOP"
obj_Post_Log('Create',oblParms) obj_Post_Log('Create',oblParms)
EndTick = GetTickCount()
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
End Service End Service
@ -761,9 +750,6 @@ Service IsValidSubLot(RDSNo, RDSType, SupplierLot)
end service end service
Service GetRDSRunHistoryByReactorAndWO(ReactorNo, WO) Service GetRDSRunHistoryByReactorAndWO(ReactorNo, WO)
StartTick = GetTickCount()
MetricName = 'GetRDSRunHistoryByReactorAndWO'
table = "RDS" table = "RDS"
ErrorMessage = '' ErrorMessage = ''
RDSRecords = '' RDSRecords = ''
@ -797,16 +783,10 @@ Service GetRDSRunHistoryByReactorAndWO(ReactorNo, WO)
end end
Next RDS Next RDS
Response = FinalRDSSortedByAssignmentDTM<1> Response = FinalRDSSortedByAssignmentDTM<1>
EndTick = GetTickCount()
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
end service end service
Service IsTWLoggingReqd(RDSNo) Service IsTWLoggingReqd(RDSNo)
StartTick = GetTickCount()
MetricName = 'IsTWLoggingReqd'
IsTWReqd = False$ IsTWReqd = False$
ExistingTWRuns = Test_Run_Services('GetTestRunKeysByRDS', RDSNo) ExistingTWRuns = Test_Run_Services('GetTestRunKeysByRDS', RDSNo)
If ExistingTWRuns EQ '' then If ExistingTWRuns EQ '' then
@ -829,7 +809,7 @@ Service IsTWLoggingReqd(RDSNo)
Layer = Field(PRSPropKey, '*', 2) Layer = Field(PRSPropKey, '*', 2)
MeasureFreq = PRSPropRec<PRS_PROP_FREQ$> MeasureFreq = PRSPropRec<PRS_PROP_FREQ$>
Start = PRSPropRec<PRS_PROP_MET_START$> Start = PRSPropRec<PRS_PROP_MET_START$>
If WaferType NE 'Product' AND WaferType NE 'Prod' AND WaferType NE '' then If WaferType NE 'Product' AND WaferType NE 'Prod' then
BEGIN CASE BEGIN CASE
CASE MeasureFreq = 'F' AND ThisReactorRunOrder = 1 ; IsTWReqd = 1 CASE MeasureFreq = 'F' AND ThisReactorRunOrder = 1 ; IsTWReqd = 1
CASE ThisReactorRunOrder = Start ; IsTWReqd = 1 CASE ThisReactorRunOrder = Start ; IsTWReqd = 1
@ -867,9 +847,6 @@ Service IsTWLoggingReqd(RDSNo)
IsTWReqd = False$ IsTWReqd = False$
end end
Response = IsTWReqd Response = IsTWReqd
EndTick = GetTickCount()
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
end service end service
Service TestWaferRanAfterLoad(RDSNo) Service TestWaferRanAfterLoad(RDSNo)
@ -1122,8 +1099,6 @@ end service
Service CopyRDSLayerParameters(RDSNo) Service CopyRDSLayerParameters(RDSNo)
StartTick = GetTickCount()
MetricName = 'CopyRDSLayerParameters'
If (RDSNo NE '') then If (RDSNo NE '') then
RunOrderNo = Xlate('RDS', RDSNo, 'RUN_ORDER_NUM', 'X') RunOrderNo = Xlate('RDS', RDSNo, 'RUN_ORDER_NUM', 'X')
@ -1176,8 +1151,6 @@ Service CopyRDSLayerParameters(RDSNo)
Error_Services('Add', 'RDSNo not supplied in ':Service:' service.') Error_Services('Add', 'RDSNo not supplied in ':Service:' service.')
end end
EndTick = GetTickCount()
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
end service end service
@ -1855,5 +1828,3 @@ return

View File

@ -78,7 +78,7 @@ Declare function SRP_Math, SRP_Hash, SRP_JSON, Epi_Part_Services, Schedule_Se
Declare function Logging_Services, GetCommandLine, NextKey, Reactor_Log_Services, SRP_DateTime, ole_getwebpage Declare function Logging_Services, GetCommandLine, NextKey, Reactor_Log_Services, SRP_DateTime, ole_getwebpage
Declare function Datetime, Reactor_Modes_Services, Work_Order_Services, React_Mode_NG_Services, Lsl_Users_Services Declare function Datetime, Reactor_Modes_Services, Work_Order_Services, React_Mode_NG_Services, Lsl_Users_Services
Declare function SRP_Time, Rds_Services, SRP_Fastarray, Httpclient_Services, SRP_List, Utility, Memberof, Error_Services Declare function SRP_Time, Rds_Services, SRP_Fastarray, Httpclient_Services, SRP_List, Utility, Memberof, Error_Services
Declare function Nica_Orders_Services, Max, RTI_CreateGUID, GetTickCount Declare function Nica_Orders_Services, Max, RTI_CreateGUID
// Report paths for various performance report services. // Report paths for various performance report services.
TemplatesFolder = Environment_Services('GetApplicationRootPath') : '\Reports\Scheduler\Templates\' TemplatesFolder = Environment_Services('GetApplicationRootPath') : '\Reports\Scheduler\Templates\'
@ -91,13 +91,6 @@ LogDate = Oconv(Date(), 'D4/')
LogTime = Oconv(Time(), 'MTS') LogTime = Oconv(Time(), 'MTS')
LoggingDTM = LogDate : ' ' : LogTime ; // Logging DTM LoggingDTM = LogDate : ' ' : LogTime ; // Logging DTM
IsProd = Environment_Services('IsProd')
If IsProd EQ True$ then
MonaResource = 'GRP_OPENINSIGHT_MES_OP_FE_REACTORSERVICES'
end else
MonaResource = 'GRP_OPENINSIGHT_MES_OP_FE_DEV_REACTORSERVICES'
end
GoToService else GoToService else
end end
@ -108,7 +101,7 @@ Return Response else ''
// Service Parameter Options // Service Parameter Options
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Options BOOLEAN = True$, False$ Options BOOLEAN = True$, False$
Options REACTORMETRIC = 'TUBE_BELL_JAR_THK', 'TUBE_BELL_JAR_WFR_CNT', 'SUSC_THK', 'SUSC_WFR_CNT', 'LOWER_QUARTZ_THK', 'LOWER_QUARTZ_WFR', 'ARMS_WFR_CNT', 'EXHAUST_CHAMBER_THK' Options REACTORMETRIC = 'TUBE_BELL_JAR_THK', 'TUBE_BELL_JAR_WFR_CNT', 'SUSC_THK', 'SUSC_WFR_CNT', 'LOWER_QUARTZ_THK', 'LOWER_QUARTZ_WFR', 'ARMS_WFR_CNT'
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Services // Services
@ -123,8 +116,6 @@ Options REACTORMETRIC = 'TUBE_BELL_JAR_THK', 'TUBE_BELL_JAR_WFR_CNT', 'SUSC_THK'
// //
//---------------------------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------------------------
Service IncrementWfrMetrics(RDSNo) Service IncrementWfrMetrics(RDSNo)
StartTick = GetTickCount()
MetricName = 'IncrementWfrMetrics'
// Get Reactor and run count details // Get Reactor and run count details
RDSRec = Xlate('RDS', RDSNo, '', 'X', '') RDSRec = Xlate('RDS', RDSNo, '', 'X', '')
@ -145,7 +136,6 @@ Service IncrementWfrMetrics(RDSNo)
CurrSuscWfrCnt = OldReactorRec<REACTOR_SUSC_WFR_CNT$> CurrSuscWfrCnt = OldReactorRec<REACTOR_SUSC_WFR_CNT$>
CurrLowerQuartzThk = OldReactorRec<REACTOR_LOWER_QUARTZ_THK$> CurrLowerQuartzThk = OldReactorRec<REACTOR_LOWER_QUARTZ_THK$>
CurrLowerQuartzWfr = OldReactorRec<REACTOR_LOWER_QUARTZ_WFR$> CurrLowerQuartzWfr = OldReactorRec<REACTOR_LOWER_QUARTZ_WFR$>
CurrExhaustThk = OldReactorRec<REACTOR_EXHAUST_CHAMBER_THK$>
// Arms are not used for EPP // Arms are not used for EPP
If ReactorType NE 'EPP' then If ReactorType NE 'EPP' then
@ -160,7 +150,6 @@ Service IncrementWfrMetrics(RDSNo)
If CurrSuscWfrCnt = '' then CurrSuscWfrCnt = 0 If CurrSuscWfrCnt = '' then CurrSuscWfrCnt = 0
If CurrLowerQuartzThk = '' then CurrLowerQuartzThk = 0 If CurrLowerQuartzThk = '' then CurrLowerQuartzThk = 0
If CurrLowerQuartzWfr = '' then CurrLowerQuartzWfr = 0 If CurrLowerQuartzWfr = '' then CurrLowerQuartzWfr = 0
If CurrExhaustThk = '' then CurrExhaustThk = 0
Begin Case Begin Case
@ -172,7 +161,6 @@ Service IncrementWfrMetrics(RDSNo)
NewReactorRec<REACTOR_SUSC_WFR_CNT$> = CurrSuscWfrCnt + 1 NewReactorRec<REACTOR_SUSC_WFR_CNT$> = CurrSuscWfrCnt + 1
NewReactorRec<REACTOR_LOWER_QUARTZ_THK$> = CurrLowerQuartzThk + TargetThickness NewReactorRec<REACTOR_LOWER_QUARTZ_THK$> = CurrLowerQuartzThk + TargetThickness
NewReactorRec<REACTOR_LOWER_QUARTZ_WFR$> = CurrLowerQuartzWfr + 1 NewReactorRec<REACTOR_LOWER_QUARTZ_WFR$> = CurrLowerQuartzWfr + 1
NewReactorRec<REACTOR_EXHAUST_CHAMBER_THK$> = CurrExhaustThk + TargetThickness
Case ReactorType = 'HTR' Case ReactorType = 'HTR'
@ -188,7 +176,6 @@ Service IncrementWfrMetrics(RDSNo)
NewReactorRec<REACTOR_LOWER_QUARTZ_THK$> = CurrLowerQuartzThk + ThkAddition NewReactorRec<REACTOR_LOWER_QUARTZ_THK$> = CurrLowerQuartzThk + ThkAddition
NewReactorRec<REACTOR_LOWER_QUARTZ_WFR$> = CurrLowerQuartzWfr + CntAddition NewReactorRec<REACTOR_LOWER_QUARTZ_WFR$> = CurrLowerQuartzWfr + CntAddition
NewReactorRec<REACTOR_ARMS_WFR_CNT$> = CurrArmsWfrCnt + WaferCount NewReactorRec<REACTOR_ARMS_WFR_CNT$> = CurrArmsWfrCnt + WaferCount
NewReactorRec<REACTOR_EXHAUST_CHAMBER_THK$> = CurrExhaustThk + ThkAddition
Case SusceptorSize = 8 Case SusceptorSize = 8
// Round up // Round up
@ -205,7 +192,6 @@ Service IncrementWfrMetrics(RDSNo)
NewReactorRec<REACTOR_LOWER_QUARTZ_THK$> = CurrLowerQuartzThk + ThkAddition NewReactorRec<REACTOR_LOWER_QUARTZ_THK$> = CurrLowerQuartzThk + ThkAddition
NewReactorRec<REACTOR_LOWER_QUARTZ_WFR$> = CurrLowerQuartzWfr + CntAddition NewReactorRec<REACTOR_LOWER_QUARTZ_WFR$> = CurrLowerQuartzWfr + CntAddition
NewReactorRec<REACTOR_ARMS_WFR_CNT$> = CurrArmsWfrCnt + WaferCount NewReactorRec<REACTOR_ARMS_WFR_CNT$> = CurrArmsWfrCnt + WaferCount
NewReactorRec<REACTOR_EXHAUST_CHAMBER_THK$> = CurrExhaustThk + ThkAddition
End Case End Case
@ -220,14 +206,11 @@ Service IncrementWfrMetrics(RDSNo)
NewReactorRec<REACTOR_LOWER_QUARTZ_THK$> = CurrLowerQuartzThk + ThkAddition NewReactorRec<REACTOR_LOWER_QUARTZ_THK$> = CurrLowerQuartzThk + ThkAddition
NewReactorRec<REACTOR_LOWER_QUARTZ_WFR$> = CurrLowerQuartzWfr + WaferCount NewReactorRec<REACTOR_LOWER_QUARTZ_WFR$> = CurrLowerQuartzWfr + WaferCount
NewReactorRec<REACTOR_ARMS_WFR_CNT$> = CurrArmsWfrCnt + WaferCount NewReactorRec<REACTOR_ARMS_WFR_CNT$> = CurrArmsWfrCnt + WaferCount
NewReactorRec<REACTOR_EXHAUST_CHAMBER_THK$> = CurrExhaustThk + ThkAddition
End Case End Case
Database_Services('WriteDataRow', 'REACTOR', ReactorNo, NewReactorRec, 1, 0, 0) Database_Services('WriteDataRow', 'REACTOR', ReactorNo, NewReactorRec, 1, 0, 0)
EndTick = GetTickCount()
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
end service end service
@ -246,7 +229,6 @@ Service GetWaferCntMetricsByReactorID(ReactorID)
ResponseData<1, 4> = ReactorRec<REACTOR_TUBE_BELL_JAR_WFR_CNT$> ResponseData<1, 4> = ReactorRec<REACTOR_TUBE_BELL_JAR_WFR_CNT$>
ResponseData<1, 5> = ReactorRec<REACTOR_TUBE_BELL_JAR_THK$> ResponseData<1, 5> = ReactorRec<REACTOR_TUBE_BELL_JAR_THK$>
ResponseData<1, 6> = ReactorRec<REACTOR_ARMS_WFR_CNT$> ResponseData<1, 6> = ReactorRec<REACTOR_ARMS_WFR_CNT$>
ResponseData<1, 7> = ReactorRec<REACTOR_EXHAUST_CHAMBER_THK$>
//These are the column titles to help us with API Responses //These are the column titles to help us with API Responses
ResponseData<2, 1> = 'ReactorID' ResponseData<2, 1> = 'ReactorID'
ResponseData<2, 2> = 'SusceptorWaferCount' ResponseData<2, 2> = 'SusceptorWaferCount'
@ -254,7 +236,6 @@ Service GetWaferCntMetricsByReactorID(ReactorID)
ResponseData<2, 4> = 'TubeWaferCount' ResponseData<2, 4> = 'TubeWaferCount'
ResponseData<2, 5> = 'TubeThickness' ResponseData<2, 5> = 'TubeThickness'
ResponseData<2, 6> = 'ArmsWaferCount' ResponseData<2, 6> = 'ArmsWaferCount'
ResponseData<2, 7> = 'ExhuastChamberThickness'
Case ReactorType EQ 'HTR' Case ReactorType EQ 'HTR'
ResponseData<1, 1> = ReactorID ResponseData<1, 1> = ReactorID
ResponseData<1, 2> = ReactorRec<REACTOR_SUSC_WFR_CNT$> ResponseData<1, 2> = ReactorRec<REACTOR_SUSC_WFR_CNT$>
@ -262,7 +243,6 @@ Service GetWaferCntMetricsByReactorID(ReactorID)
ResponseData<1, 4> = ReactorRec<REACTOR_TUBE_BELL_JAR_WFR_CNT$> ResponseData<1, 4> = ReactorRec<REACTOR_TUBE_BELL_JAR_WFR_CNT$>
ResponseData<1, 5> = ReactorRec<REACTOR_TUBE_BELL_JAR_THK$> ResponseData<1, 5> = ReactorRec<REACTOR_TUBE_BELL_JAR_THK$>
ResponseData<1, 6> = ReactorRec<REACTOR_ARMS_WFR_CNT$> ResponseData<1, 6> = ReactorRec<REACTOR_ARMS_WFR_CNT$>
ResponseData<1, 7> = ReactorRec<REACTOR_EXHAUST_CHAMBER_THK$>
//These are the column titles to help us with API Responses //These are the column titles to help us with API Responses
ResponseData<2, 1> = 'ReactorID' ResponseData<2, 1> = 'ReactorID'
ResponseData<2, 2> = 'SusceptorWaferCount' ResponseData<2, 2> = 'SusceptorWaferCount'
@ -270,7 +250,6 @@ Service GetWaferCntMetricsByReactorID(ReactorID)
ResponseData<2, 4> = 'TubeWaferCount' ResponseData<2, 4> = 'TubeWaferCount'
ResponseData<2, 5> = 'TubeThickness' ResponseData<2, 5> = 'TubeThickness'
ResponseData<2, 6> = 'ArmsWaferCount' ResponseData<2, 6> = 'ArmsWaferCount'
ResponseData<2, 7> = 'ExhuastChamberThickness'
Case ReactorType EQ 'EPP' Case ReactorType EQ 'EPP'
ResponseData<1, 1> = ReactorID ResponseData<1, 1> = ReactorID
ResponseData<1, 2> = ReactorRec<REACTOR_SUSC_WFR_CNT$> ResponseData<1, 2> = ReactorRec<REACTOR_SUSC_WFR_CNT$>
@ -279,7 +258,6 @@ Service GetWaferCntMetricsByReactorID(ReactorID)
ResponseData<1, 5> = ReactorRec<REACTOR_TUBE_BELL_JAR_THK$> ResponseData<1, 5> = ReactorRec<REACTOR_TUBE_BELL_JAR_THK$>
ResponseData<1, 6> = ReactorRec<REACTOR_LOWER_QUARTZ_WFR$> ResponseData<1, 6> = ReactorRec<REACTOR_LOWER_QUARTZ_WFR$>
ResponseData<1, 7> = ReactorRec<REACTOR_LOWER_QUARTZ_THK$> ResponseData<1, 7> = ReactorRec<REACTOR_LOWER_QUARTZ_THK$>
ResponseData<1, 8> = ReactorRec<REACTOR_EXHAUST_CHAMBER_THK$>
//These are the column titles to help us with API Responses //These are the column titles to help us with API Responses
ResponseData<2, 1> = 'ReactorID' ResponseData<2, 1> = 'ReactorID'
ResponseData<2, 2> = 'SusceptorWaferCount' ResponseData<2, 2> = 'SusceptorWaferCount'
@ -288,7 +266,6 @@ Service GetWaferCntMetricsByReactorID(ReactorID)
ResponseData<2, 5> = 'BellJarThickness' ResponseData<2, 5> = 'BellJarThickness'
ResponseData<2, 6> = 'LowerQuartzWaferCount' ResponseData<2, 6> = 'LowerQuartzWaferCount'
ResponseData<2, 7> = 'LowerQuartzThickness' ResponseData<2, 7> = 'LowerQuartzThickness'
ResponseData<2, 8> = 'ExhuastChamberThickness'
End Case End Case
Response = ResponseData Response = ResponseData
end else end else
@ -330,7 +307,6 @@ Service DecrementWfrMetrics(RDSNo)
CurrSuscWfrCnt = OldReactorRec<REACTOR_SUSC_WFR_CNT$> CurrSuscWfrCnt = OldReactorRec<REACTOR_SUSC_WFR_CNT$>
CurrLowerQuartzThk = OldReactorRec<REACTOR_LOWER_QUARTZ_THK$> CurrLowerQuartzThk = OldReactorRec<REACTOR_LOWER_QUARTZ_THK$>
CurrLowerQuartzWfr = OldReactorRec<REACTOR_LOWER_QUARTZ_WFR$> CurrLowerQuartzWfr = OldReactorRec<REACTOR_LOWER_QUARTZ_WFR$>
CurrExhaustThk = OldReactorRec<REACTOR_EXHAUST_CHAMBER_THK$>
// Arms are not used for EPP // Arms are not used for EPP
If ReactorType NE 'EPP' then If ReactorType NE 'EPP' then
@ -345,7 +321,6 @@ Service DecrementWfrMetrics(RDSNo)
If CurrSuscWfrCnt = '' then CurrSuscWfrCnt = 0 If CurrSuscWfrCnt = '' then CurrSuscWfrCnt = 0
If CurrLowerQuartzThk = '' then CurrLowerQuartzThk = 0 If CurrLowerQuartzThk = '' then CurrLowerQuartzThk = 0
If CurrLowerQuartzWfr = '' then CurrLowerQuartzWfr = 0 If CurrLowerQuartzWfr = '' then CurrLowerQuartzWfr = 0
If CurrExhaustThk = '' then CurrExhaustThk = 0
Begin Case Begin Case
@ -357,7 +332,6 @@ Service DecrementWfrMetrics(RDSNo)
NewReactorRec<REACTOR_SUSC_WFR_CNT$> = CurrSuscWfrCnt - 1 NewReactorRec<REACTOR_SUSC_WFR_CNT$> = CurrSuscWfrCnt - 1
NewReactorRec<REACTOR_LOWER_QUARTZ_THK$> = CurrLowerQuartzThk - TargetThickness NewReactorRec<REACTOR_LOWER_QUARTZ_THK$> = CurrLowerQuartzThk - TargetThickness
NewReactorRec<REACTOR_LOWER_QUARTZ_WFR$> = CurrLowerQuartzWfr - 1 NewReactorRec<REACTOR_LOWER_QUARTZ_WFR$> = CurrLowerQuartzWfr - 1
NewReactorRec<REACTOR_EXHAUST_CHAMBER_THK$> = CurrExhaustThk - TargetThickness
Case ReactorType = 'HTR' Case ReactorType = 'HTR'
@ -368,12 +342,11 @@ Service DecrementWfrMetrics(RDSNo)
ThkAddition = (WaferCount / 5) * TargetThickness ThkAddition = (WaferCount / 5) * TargetThickness
NewReactorRec<REACTOR_TUBE_BELL_JAR_THK$> = CurrTubeBellJarThk - ThkAddition NewReactorRec<REACTOR_TUBE_BELL_JAR_THK$> = CurrTubeBellJarThk - ThkAddition
NewReactorRec<REACTOR_TUBE_BELL_JAR_WFR_CNT$> = CurrTubeBellJarCnt - CntAddition NewReactorRec<REACTOR_TUBE_BELL_JAR_WFR_CNT$> = CurrTubeBellJarCnt - CntAddition
NewReactorRec<REACTOR_SUSC_THK$> = CurrSuscThk - ThkAddition NewReactorRec<REACTOR_SUSC_THK$> = CurrSuscThk + ThkAddition
NewReactorRec<REACTOR_SUSC_WFR_CNT$> = CurrSuscWfrCnt - CntAddition NewReactorRec<REACTOR_SUSC_WFR_CNT$> = CurrSuscWfrCnt - CntAddition
NewReactorRec<REACTOR_LOWER_QUARTZ_THK$> = CurrLowerQuartzThk - ThkAddition NewReactorRec<REACTOR_LOWER_QUARTZ_THK$> = CurrLowerQuartzThk - ThkAddition
NewReactorRec<REACTOR_LOWER_QUARTZ_WFR$> = CurrLowerQuartzWfr - CntAddition NewReactorRec<REACTOR_LOWER_QUARTZ_WFR$> = CurrLowerQuartzWfr - CntAddition
NewReactorRec<REACTOR_ARMS_WFR_CNT$> = CurrArmsWfrCnt - WaferCount NewReactorRec<REACTOR_ARMS_WFR_CNT$> = CurrArmsWfrCnt - WaferCount
NewReactorRec<REACTOR_EXHAUST_CHAMBER_THK$> = CurrExhaustThk - ThkAddition
Case SusceptorSize = 8 Case SusceptorSize = 8
// Round up // Round up
@ -390,7 +363,6 @@ Service DecrementWfrMetrics(RDSNo)
NewReactorRec<REACTOR_LOWER_QUARTZ_THK$> = CurrLowerQuartzThk - ThkAddition NewReactorRec<REACTOR_LOWER_QUARTZ_THK$> = CurrLowerQuartzThk - ThkAddition
NewReactorRec<REACTOR_LOWER_QUARTZ_WFR$> = CurrLowerQuartzWfr - CntAddition NewReactorRec<REACTOR_LOWER_QUARTZ_WFR$> = CurrLowerQuartzWfr - CntAddition
NewReactorRec<REACTOR_ARMS_WFR_CNT$> = CurrArmsWfrCnt - WaferCount NewReactorRec<REACTOR_ARMS_WFR_CNT$> = CurrArmsWfrCnt - WaferCount
NewReactorRec<REACTOR_EXHAUST_CHAMBER_THK$> = CurrExhaustThk - ThkAddition
End Case End Case
@ -405,7 +377,6 @@ Service DecrementWfrMetrics(RDSNo)
NewReactorRec<REACTOR_LOWER_QUARTZ_THK$> = CurrLowerQuartzThk - ThkAddition NewReactorRec<REACTOR_LOWER_QUARTZ_THK$> = CurrLowerQuartzThk - ThkAddition
NewReactorRec<REACTOR_LOWER_QUARTZ_WFR$> = CurrLowerQuartzWfr - WaferCount NewReactorRec<REACTOR_LOWER_QUARTZ_WFR$> = CurrLowerQuartzWfr - WaferCount
NewReactorRec<REACTOR_ARMS_WFR_CNT$> = CurrArmsWfrCnt - WaferCount NewReactorRec<REACTOR_ARMS_WFR_CNT$> = CurrArmsWfrCnt - WaferCount
NewReactorRec<REACTOR_EXHAUST_CHAMBER_THK$> = CurrExhaustThk - ThkAddition
End Case End Case
@ -439,7 +410,6 @@ Service IncrementTestWfrMetrics(TargetThickness, WaferCount, ReactorNo)
CurrSuscWfrCnt = OldReactorRec<REACTOR_SUSC_WFR_CNT$> CurrSuscWfrCnt = OldReactorRec<REACTOR_SUSC_WFR_CNT$>
CurrLowerQuartzThk = OldReactorRec<REACTOR_LOWER_QUARTZ_THK$> CurrLowerQuartzThk = OldReactorRec<REACTOR_LOWER_QUARTZ_THK$>
CurrLowerQuartzWfr = OldReactorRec<REACTOR_LOWER_QUARTZ_WFR$> CurrLowerQuartzWfr = OldReactorRec<REACTOR_LOWER_QUARTZ_WFR$>
CurrExhaustThk = OldReactorRec<REACTOR_EXHAUST_CHAMBER_THK$>
// Arms are not used for EPP // Arms are not used for EPP
If ReactorType NE 'EPP' then If ReactorType NE 'EPP' then
@ -465,7 +435,6 @@ Service IncrementTestWfrMetrics(TargetThickness, WaferCount, ReactorNo)
NewReactorRec<REACTOR_SUSC_WFR_CNT$> = CurrSuscWfrCnt + 1 NewReactorRec<REACTOR_SUSC_WFR_CNT$> = CurrSuscWfrCnt + 1
NewReactorRec<REACTOR_LOWER_QUARTZ_THK$> = CurrLowerQuartzThk + TargetThickness NewReactorRec<REACTOR_LOWER_QUARTZ_THK$> = CurrLowerQuartzThk + TargetThickness
NewReactorRec<REACTOR_LOWER_QUARTZ_WFR$> = CurrLowerQuartzWfr + 1 NewReactorRec<REACTOR_LOWER_QUARTZ_WFR$> = CurrLowerQuartzWfr + 1
NewReactorRec<REACTOR_EXHAUST_CHAMBER_THK$> = CurrExhaustThk + TargetThickness
Case ReactorType = 'HTR' Case ReactorType = 'HTR'
@ -481,7 +450,6 @@ Service IncrementTestWfrMetrics(TargetThickness, WaferCount, ReactorNo)
NewReactorRec<REACTOR_LOWER_QUARTZ_THK$> = CurrLowerQuartzThk + ThkAddition NewReactorRec<REACTOR_LOWER_QUARTZ_THK$> = CurrLowerQuartzThk + ThkAddition
NewReactorRec<REACTOR_LOWER_QUARTZ_WFR$> = CurrLowerQuartzWfr + CntAddition NewReactorRec<REACTOR_LOWER_QUARTZ_WFR$> = CurrLowerQuartzWfr + CntAddition
NewReactorRec<REACTOR_ARMS_WFR_CNT$> = CurrArmsWfrCnt + WaferCount NewReactorRec<REACTOR_ARMS_WFR_CNT$> = CurrArmsWfrCnt + WaferCount
NewReactorRec<REACTOR_EXHAUST_CHAMBER_THK$> = CurrExhaustThk + ThkAddition
Case SusceptorSize = 8 Case SusceptorSize = 8
// Round up // Round up
@ -498,7 +466,6 @@ Service IncrementTestWfrMetrics(TargetThickness, WaferCount, ReactorNo)
NewReactorRec<REACTOR_LOWER_QUARTZ_THK$> = CurrLowerQuartzThk + ThkAddition NewReactorRec<REACTOR_LOWER_QUARTZ_THK$> = CurrLowerQuartzThk + ThkAddition
NewReactorRec<REACTOR_LOWER_QUARTZ_WFR$> = CurrLowerQuartzWfr + CntAddition NewReactorRec<REACTOR_LOWER_QUARTZ_WFR$> = CurrLowerQuartzWfr + CntAddition
NewReactorRec<REACTOR_ARMS_WFR_CNT$> = CurrArmsWfrCnt + WaferCount NewReactorRec<REACTOR_ARMS_WFR_CNT$> = CurrArmsWfrCnt + WaferCount
NewReactorRec<REACTOR_EXHAUST_CHAMBER_THK$> = CurrExhaustThk + ThkAddition
End Case End Case
@ -513,7 +480,6 @@ Service IncrementTestWfrMetrics(TargetThickness, WaferCount, ReactorNo)
NewReactorRec<REACTOR_LOWER_QUARTZ_THK$> = CurrLowerQuartzThk + ThkAddition NewReactorRec<REACTOR_LOWER_QUARTZ_THK$> = CurrLowerQuartzThk + ThkAddition
NewReactorRec<REACTOR_LOWER_QUARTZ_WFR$> = CurrLowerQuartzWfr + WaferCount NewReactorRec<REACTOR_LOWER_QUARTZ_WFR$> = CurrLowerQuartzWfr + WaferCount
NewReactorRec<REACTOR_ARMS_WFR_CNT$> = CurrArmsWfrCnt + WaferCount NewReactorRec<REACTOR_ARMS_WFR_CNT$> = CurrArmsWfrCnt + WaferCount
NewReactorRec<REACTOR_EXHAUST_CHAMBER_THK$> = CurrExhaustThk + ThkAddition
End Case End Case
@ -547,7 +513,6 @@ Service DecrementTestWfrMetrics(TargetThickness, WaferCount, ReactorNo)
CurrSuscWfrCnt = OldReactorRec<REACTOR_SUSC_WFR_CNT$> CurrSuscWfrCnt = OldReactorRec<REACTOR_SUSC_WFR_CNT$>
CurrLowerQuartzThk = OldReactorRec<REACTOR_LOWER_QUARTZ_THK$> CurrLowerQuartzThk = OldReactorRec<REACTOR_LOWER_QUARTZ_THK$>
CurrLowerQuartzWfr = OldReactorRec<REACTOR_LOWER_QUARTZ_WFR$> CurrLowerQuartzWfr = OldReactorRec<REACTOR_LOWER_QUARTZ_WFR$>
CurrExhaustThk = OldReactorRec<REACTOR_EXHAUST_CHAMBER_THK$>
// Arms are not used for EPP // Arms are not used for EPP
If ReactorType NE 'EPP' then If ReactorType NE 'EPP' then
@ -562,7 +527,6 @@ Service DecrementTestWfrMetrics(TargetThickness, WaferCount, ReactorNo)
If CurrSuscWfrCnt = '' then CurrSuscWfrCnt = 0 If CurrSuscWfrCnt = '' then CurrSuscWfrCnt = 0
If CurrLowerQuartzThk = '' then CurrLowerQuartzThk = 0 If CurrLowerQuartzThk = '' then CurrLowerQuartzThk = 0
If CurrLowerQuartzWfr = '' then CurrLowerQuartzWfr = 0 If CurrLowerQuartzWfr = '' then CurrLowerQuartzWfr = 0
If CurrExhaustThk = '' then CurrExhaustThk = 0
Begin Case Begin Case
@ -574,7 +538,6 @@ Service DecrementTestWfrMetrics(TargetThickness, WaferCount, ReactorNo)
NewReactorRec<REACTOR_SUSC_WFR_CNT$> = CurrSuscWfrCnt - 1 NewReactorRec<REACTOR_SUSC_WFR_CNT$> = CurrSuscWfrCnt - 1
NewReactorRec<REACTOR_LOWER_QUARTZ_THK$> = CurrLowerQuartzThk - TargetThickness NewReactorRec<REACTOR_LOWER_QUARTZ_THK$> = CurrLowerQuartzThk - TargetThickness
NewReactorRec<REACTOR_LOWER_QUARTZ_WFR$> = CurrLowerQuartzWfr - 1 NewReactorRec<REACTOR_LOWER_QUARTZ_WFR$> = CurrLowerQuartzWfr - 1
NewReactorRec<REACTOR_EXHAUST_CHAMBER_THK$> = CurrExhaustThk - TargetThickness
Case ReactorType = 'HTR' Case ReactorType = 'HTR'
@ -585,12 +548,11 @@ Service DecrementTestWfrMetrics(TargetThickness, WaferCount, ReactorNo)
ThkAddition = (WaferCount / 5) * TargetThickness ThkAddition = (WaferCount / 5) * TargetThickness
NewReactorRec<REACTOR_TUBE_BELL_JAR_THK$> = CurrTubeBellJarThk - ThkAddition NewReactorRec<REACTOR_TUBE_BELL_JAR_THK$> = CurrTubeBellJarThk - ThkAddition
NewReactorRec<REACTOR_TUBE_BELL_JAR_WFR_CNT$> = CurrTubeBellJarCnt - CntAddition NewReactorRec<REACTOR_TUBE_BELL_JAR_WFR_CNT$> = CurrTubeBellJarCnt - CntAddition
NewReactorRec<REACTOR_SUSC_THK$> = CurrSuscThk - ThkAddition NewReactorRec<REACTOR_SUSC_THK$> = CurrSuscThk + ThkAddition
NewReactorRec<REACTOR_SUSC_WFR_CNT$> = CurrSuscWfrCnt - CntAddition NewReactorRec<REACTOR_SUSC_WFR_CNT$> = CurrSuscWfrCnt - CntAddition
NewReactorRec<REACTOR_LOWER_QUARTZ_THK$> = CurrLowerQuartzThk - ThkAddition NewReactorRec<REACTOR_LOWER_QUARTZ_THK$> = CurrLowerQuartzThk - ThkAddition
NewReactorRec<REACTOR_LOWER_QUARTZ_WFR$> = CurrLowerQuartzWfr - CntAddition NewReactorRec<REACTOR_LOWER_QUARTZ_WFR$> = CurrLowerQuartzWfr - CntAddition
NewReactorRec<REACTOR_ARMS_WFR_CNT$> = CurrArmsWfrCnt - WaferCount NewReactorRec<REACTOR_ARMS_WFR_CNT$> = CurrArmsWfrCnt - WaferCount
NewReactorRec<REACTOR_EXHAUST_CHAMBER_THK$> = CurrExhaustThk - ThkAddition
Case SusceptorSize = 8 Case SusceptorSize = 8
// Round up // Round up
@ -607,7 +569,6 @@ Service DecrementTestWfrMetrics(TargetThickness, WaferCount, ReactorNo)
NewReactorRec<REACTOR_LOWER_QUARTZ_THK$> = CurrLowerQuartzThk - ThkAddition NewReactorRec<REACTOR_LOWER_QUARTZ_THK$> = CurrLowerQuartzThk - ThkAddition
NewReactorRec<REACTOR_LOWER_QUARTZ_WFR$> = CurrLowerQuartzWfr - CntAddition NewReactorRec<REACTOR_LOWER_QUARTZ_WFR$> = CurrLowerQuartzWfr - CntAddition
NewReactorRec<REACTOR_ARMS_WFR_CNT$> = CurrArmsWfrCnt - WaferCount NewReactorRec<REACTOR_ARMS_WFR_CNT$> = CurrArmsWfrCnt - WaferCount
NewReactorRec<REACTOR_EXHAUST_CHAMBER_THK$> = CurrExhaustThk - ThkAddition
End Case End Case
@ -622,7 +583,6 @@ Service DecrementTestWfrMetrics(TargetThickness, WaferCount, ReactorNo)
NewReactorRec<REACTOR_LOWER_QUARTZ_THK$> = CurrLowerQuartzThk - ThkAddition NewReactorRec<REACTOR_LOWER_QUARTZ_THK$> = CurrLowerQuartzThk - ThkAddition
NewReactorRec<REACTOR_LOWER_QUARTZ_WFR$> = CurrLowerQuartzWfr - WaferCount NewReactorRec<REACTOR_LOWER_QUARTZ_WFR$> = CurrLowerQuartzWfr - WaferCount
NewReactorRec<REACTOR_ARMS_WFR_CNT$> = CurrArmsWfrCnt - WaferCount NewReactorRec<REACTOR_ARMS_WFR_CNT$> = CurrArmsWfrCnt - WaferCount
NewReactorRec<REACTOR_EXHAUST_CHAMBER_THK$> = CurrExhaustThk - ThkAddition
End Case End Case
@ -636,7 +596,7 @@ end service
// ResetWfrMetric // ResetWfrMetric
// //
// RDSNo. - [Required] // RDSNo. - [Required]
// MetricType - [Required]('TUBE_BELL_JAR_THK', 'TUBE_BELL_JAR_WFR_CNT', 'SUSC_THK', 'SUSC_WFR_CNT', 'LOWER_QUARTZ_THK', 'LOWER_QUARTZ_WFR', 'ARMS_WFR_CNT', EXHAUST_CHAMBER_THK) // MetricType - [Required]('TUBE_BELL_JAR_THK', 'TUBE_BELL_JAR_WFR_CNT', 'SUSC_THK', 'SUSC_WFR_CNT', 'LOWER_QUARTZ_THK', 'LOWER_QUARTZ_WFR', 'ARMS_WFR_CNT')
// //
// Reset a specified REACTOR metric to 0. // Reset a specified REACTOR metric to 0.
// //
@ -668,9 +628,6 @@ Service ResetWfrMetric(ReactorNo, MetricType = REACTORMETRIC)
Case MetricType = 'ARMS_WFR_CNT' Case MetricType = 'ARMS_WFR_CNT'
ReactorRec<REACTOR_ARMS_WFR_CNT$> = 0 ReactorRec<REACTOR_ARMS_WFR_CNT$> = 0
Case MetricType = 'EXHAUST_CHAMBER_THK'
ReactorRec<REACTOR_EXHAUST_CHAMBER_THK$> = 0
End Case End Case
Database_Services('WriteDataRow', 'REACTOR', ReactorNo, ReactorRec, 1, 0, 0) Database_Services('WriteDataRow', 'REACTOR', ReactorNo, ReactorRec, 1, 0, 0)
@ -2042,35 +1999,16 @@ Service CreateReactModeChange(UserID, ReactNo, Mode, ModeSubCat, ModeText, Force
If ErrorMsg EQ '' then If ErrorMsg EQ '' then
AbortAlarmFeatureFlag = Xlate('FEATURE_FLAGS', 'NICA_ABORT_ALARM', FEATURE_FLAGS.ENABLED$, 'X') AbortAlarmFeatureFlag = Xlate('FEATURE_FLAGS', 'NICA_ABORT_ALARM', FEATURE_FLAGS.ENABLED$, 'X')
If AbortAlarmFeatureFlag EQ True$ then If AbortAlarmFeatureFlag EQ True$ then
If IntrMaintFeatureFlag EQ True$ then
AbortAlarmFromIntrusiveMaintRequired = Nica_Orders_Services('AbortAlarmFromIntrusiveMaintRequired', ReactNo)
ActiveIntrusiveMaintChecklists = Nica_Orders_Services('GetActiveOrders', 'REACTOR', ReactNo, 'INTRUSIVE_MAINT')
IntrusiveMaintChecklistActive = (ActiveIntrusiveMaintChecklists NE '')
end else
AbortAlarmFromIntrusiveMaintRequired = False$
IntrusiveMaintChecklistActive = False$
end
ModeSubCatFlowId = Xlate('REACT_PROB_CAT', ModeSubCatId, REACT_PROB_CAT_ABORT_ALARM_FLOW_ID$, 'X') ModeSubCatFlowId = Xlate('REACT_PROB_CAT', ModeSubCatId, REACT_PROB_CAT_ABORT_ALARM_FLOW_ID$, 'X')
ModeSubCatRespLvl = Xlate('REACT_PROB_CAT', ModeSubCatId, REACT_PROB_CAT_ABORT_ALARM_RESPONSE_LEVEL$, 'X') ModeSubCatRespLvl = Xlate('REACT_PROB_CAT', ModeSubCatId, REACT_PROB_CAT_ABORT_ALARM_RESPONSE_LEVEL$, 'X')
AbortAlarmComp = Xlate('REACTOR', ReactNo, REACTOR_ABORT_ALARM_COMPLETE$, 'X') AbortAlarmComp = Xlate('REACTOR', ReactNo, REACTOR_ABORT_ALARM_COMPLETE$, 'X')
ActiveAbortAlarmOrders = Nica_Orders_Services('GetActiveOrders', 'REACTOR', ReactNo, 'ABORT_ALARM') ActiveAbortAlarmOrders = Nica_Orders_Services('GetActiveOrders', 'REACTOR', ReactNo, 'ABORT_ALARM')
AbortAlarmOrderActive = (ActiveAbortAlarmOrders NE '') AbortAlarmOrderActive = (ActiveAbortAlarmOrders NE '')
ReactorType = Xlate('REACTOR', ReactNo, REACTOR_REACT_TYPE$, 'X')
ChecklistIds = Nica_Orders_Services('GetFlowChecklistIds', ModeSubCatFlowId, 'ABORT_ALARM', ReactorType)
CreateAbortAlarmOrder = False$
Intrusive = False$
Begin Case Begin Case
Case ( AbortAlarmOrderActive and (SelE10State _EQC 'Productive') ) Case ( AbortAlarmOrderActive and (SelE10State _EQC 'Productive') )
ErrorMsg = "An ABORT/ALARM Checklist is active for this reactor and must be completed or overridden in order to change to a productive state." ErrorMsg = "An ABORT/ALARM Checklist is active for this reactor and must be completed or overridden in order to change to a productive state."
Case ( AbortAlarmFromIntrusiveMaintRequired and IndexC(ModeSubCat, 'ABORT/ALARM', 1) and (ModeSubCatFlowId NE '') and (ChecklistIds NE '') ) Case ( AbortAlarmOrderActive and IndexC(ModeSubCat, 'ABORT/ALARM', 1) and (ModeSubCatFlowId NE '') )
// INTRUSIVE_MAINT FIRST_PRODUCT_RUN_THICK or FIRST_PRODUCT_RUN_HGCV checklist started and
// ABORT/ALARM mode entered, so create an ABORT/ALARM order to contain product in reactor.
CreateAbortAlarmOrder = True$
Intrusive = True$
Case ( Not(IntrusiveMaintChecklistActive) and AbortAlarmOrderActive and IndexC(ModeSubCat, 'ABORT/ALARM', 1) and (ModeSubCatFlowId NE '') )
// If there is an active ABORT/ALARM NICA order, then we need to check if the new sub mode is different than the sub mode entered when the ABORT/ALARM // If there is an active ABORT/ALARM NICA order, then we need to check if the new sub mode is different than the sub mode entered when the ABORT/ALARM
// NICA order was created and is of a higher response level or the new mode is WAITING_FOR_OPERATOR and the sub mode has changed. This means the maintenance // NICA order was created and is of a higher response level or the new mode is WAITING_FOR_OPERATOR and the sub mode has changed. This means the maintenance
// team deemed the true ABORT/ALARM root cause was different than the cause the operators selected. // team deemed the true ABORT/ALARM root cause was different than the cause the operators selected.
@ -2082,26 +2020,26 @@ Service CreateReactModeChange(UserID, ReactNo, Mode, ModeSubCat, ModeText, Force
Next ActiveAbortAlarmRespLvl Next ActiveAbortAlarmRespLvl
If ( (Mode _EQC 'WAITING_FOR_OPERATOR') and (ModeSubCatFlowId NE ActiveAbortAlarmFlowIds) ) | If ( (Mode _EQC 'WAITING_FOR_OPERATOR') and (ModeSubCatFlowId NE ActiveAbortAlarmFlowIds) ) |
or ( (ModeSubCatFlowId NE ActiveAbortAlarmFlowIds) and (ModeSubCatRespLvl GT MaxActiveRespLvl) ) then or ( (ModeSubCatFlowId NE ActiveAbortAlarmFlowIds) and (ModeSubCatRespLvl GT MaxActiveRespLvl) ) then
ReactorType = Xlate('REACTOR', ReactNo, REACTOR_REACT_TYPE$, 'X')
ChecklistIds = Nica_Orders_Services('GetFlowChecklistIds', ModeSubCatFlowId, 'ABORT_ALARM', ReactorType)
If ChecklistIds NE '' then If ChecklistIds NE '' then
CreateAbortAlarmOrder = True$ Nica_Orders_Services('CreateNewOrder', 'REACTOR', ReactNo, 'ABORT_ALARM', ModeSubCatFlowId, ModeSubCatRespLvl, ChecklistIds)
RlComment = 'ABORT/ALARM initiated for flow ':ModeSubCatFlowId:'.'
end end
end end
Case ( Not(IntrusiveMaintChecklistActive) and Not(AbortAlarmComp) and Not(AbortAlarmOrderActive) and IndexC(ModeSubCat, 'ABORT/ALARM', 1) and (ModeSubCatFlowId NE '') and (ChecklistIds NE '') ) Case ( Not(AbortAlarmComp) and Not(AbortAlarmOrderActive) and IndexC(ModeSubCat, 'ABORT/ALARM', 1) and (ModeSubCatFlowId NE '') )
// Typical ABORT/ALARM case ReactorType = Xlate('REACTOR', ReactNo, REACTOR_REACT_TYPE$, 'X')
CreateAbortAlarmOrder = True$ ChecklistIds = Nica_Orders_Services('GetFlowChecklistIds', ModeSubCatFlowId, 'ABORT_ALARM', ReactorType)
If ChecklistIds NE '' then
Nica_Orders_Services('CreateNewOrder', 'REACTOR', ReactNo, 'ABORT_ALARM', ModeSubCatFlowId, ModeSubCatRespLvl, ChecklistIds)
RlComment = 'ABORT/ALARM initiated for flow ':ModeSubCatFlowId:'.'
end
Case Otherwise$ Case Otherwise$
// Don't create an ABORT/ALARM NICA order // Don't create an ABORT/ALARM NICA order
Null Null
End Case End Case
If CreateAbortAlarmOrder then
Nica_Orders_Services('CreateNewOrder', 'REACTOR', ReactNo, 'ABORT_ALARM', ModeSubCatFlowId, ModeSubCatRespLvl, ChecklistIds, Intrusive)
RlComment = 'ABORT/ALARM initiated for flow ':ModeSubCatFlowId:'.'
end
end end
end end
@ -3614,8 +3552,6 @@ end service
Service GetReactorAvailChamberCount(ReactNo) Service GetReactorAvailChamberCount(ReactNo)
StartTick = GetTickCount()
MetricName = 'GetReactorAvailChamberCount'
ErrMsg = 'Error in ReactorServices -> GetReactorAvailChamberCount: ' ErrMsg = 'Error in ReactorServices -> GetReactorAvailChamberCount: '
AvailableChamberCount = 0 AvailableChamberCount = 0
@ -3635,8 +3571,6 @@ Service GetReactorAvailChamberCount(ReactNo)
end end
Response = AvailableChamberCount Response = AvailableChamberCount
EndTick = GetTickCount()
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
end service end service
@ -4355,4 +4289,3 @@ ClearCursors:
return return

View File

@ -140,7 +140,7 @@ WRITE_RECORD_PRE:
// Req'd parameter checks // Req'd parameter checks
ItemType = {RI_TYPE} ItemType = {RI_TYPE}
If ItemType EQ '' then ErrMsg := 'Item Type was not specified. ' * If ItemType EQ '' then ErrMsg := 'Item Type was not specified. '
If ErrMsg NE '' then If ErrMsg NE '' then
Error_Services('Add', 'Error Saving Reactor Item: ' : ErrMsg) Error_Services('Add', 'Error Saving Reactor Item: ' : ErrMsg)

View File

@ -79,7 +79,6 @@ Service CreateReturnToFabRecord(CassId, UserId)
Recipients = XLATE('NOTIFICATION','SHIPPING',NOTIFICATION_USER_ID$,'X') Recipients = XLATE('NOTIFICATION','SHIPPING',NOTIFICATION_USER_ID$,'X')
Recipients<1, -1> = XLATE('NOTIFICATION','RETURN_TO_FAB_ENG',NOTIFICATION_USER_ID$,'X') Recipients<1, -1> = XLATE('NOTIFICATION','RETURN_TO_FAB_ENG',NOTIFICATION_USER_ID$,'X')
Recipients<1, -1> = XLATE('NOTIFICATION','RETURN_TO_FAB_MANUF',NOTIFICATION_USER_ID$,'X') Recipients<1, -1> = XLATE('NOTIFICATION','RETURN_TO_FAB_MANUF',NOTIFICATION_USER_ID$,'X')
Recipients<1, -1> = XLATE('NOTIFICATION','RETURN_TO_FAB_GENERAL',NOTIFICATION_USER_ID$,'X')
Recipients<1, -1> = UserId Recipients<1, -1> = UserId
SentFrom = 'OI_ADMIN' SentFrom = 'OI_ADMIN'
Subject = 'Return To Fab Form Created' Subject = 'Return To Fab Form Created'
@ -476,7 +475,6 @@ Service SetBinToBin(RTFId, MHUserId)
Recipients = XLATE('NOTIFICATION','SHIPPING',NOTIFICATION_USER_ID$,'X') Recipients = XLATE('NOTIFICATION','SHIPPING',NOTIFICATION_USER_ID$,'X')
Recipients<1, -1> = XLATE('NOTIFICATION','RETURN_TO_FAB_ENG',NOTIFICATION_USER_ID$,'X') Recipients<1, -1> = XLATE('NOTIFICATION','RETURN_TO_FAB_ENG',NOTIFICATION_USER_ID$,'X')
Recipients<1, -1> = XLATE('NOTIFICATION','RETURN_TO_FAB_MANUF',NOTIFICATION_USER_ID$,'X') Recipients<1, -1> = XLATE('NOTIFICATION','RETURN_TO_FAB_MANUF',NOTIFICATION_USER_ID$,'X')
Recipients<1, -1> = XLATE('NOTIFICATION','RETURN_TO_FAB_GENERAL',NOTIFICATION_USER_ID$,'X')
Recipients<1, -1> = RTFOrigUser Recipients<1, -1> = RTFOrigUser
SentFrom = 'OI_ADMIN' SentFrom = 'OI_ADMIN'
Subject = 'Return To Fab Form Updated' Subject = 'Return To Fab Form Updated'
@ -551,7 +549,6 @@ Service SetRTFCompleted(RTFId, CompleteUserId)
Recipients = XLATE('NOTIFICATION','SHIPPING',NOTIFICATION_USER_ID$,'X') Recipients = XLATE('NOTIFICATION','SHIPPING',NOTIFICATION_USER_ID$,'X')
Recipients<1, -1> = XLATE('NOTIFICATION','RETURN_TO_FAB_ENG',NOTIFICATION_USER_ID$,'X') Recipients<1, -1> = XLATE('NOTIFICATION','RETURN_TO_FAB_ENG',NOTIFICATION_USER_ID$,'X')
Recipients<1, -1> = XLATE('NOTIFICATION','RETURN_TO_FAB_MANUF',NOTIFICATION_USER_ID$,'X') Recipients<1, -1> = XLATE('NOTIFICATION','RETURN_TO_FAB_MANUF',NOTIFICATION_USER_ID$,'X')
Recipients<1, -1> = XLATE('NOTIFICATION','RETURN_TO_FAB_GENERAL',NOTIFICATION_USER_ID$,'X')
Recipients<1, -1> = RTFRecord<RETURN_TO_FAB_LOTS_REQUESTOR_USER_ID$> Recipients<1, -1> = RTFRecord<RETURN_TO_FAB_LOTS_REQUESTOR_USER_ID$>
SentFrom = 'OI_ADMIN' SentFrom = 'OI_ADMIN'
Subject = 'Return To Fab Form Completed' Subject = 'Return To Fab Form Completed'
@ -626,7 +623,6 @@ Service SetEvalInfo(RTFId, EvalUserId, ResultId)
Recipients = XLATE('NOTIFICATION','SHIPPING',NOTIFICATION_USER_ID$,'X') Recipients = XLATE('NOTIFICATION','SHIPPING',NOTIFICATION_USER_ID$,'X')
Recipients<1, -1> = XLATE('NOTIFICATION','RETURN_TO_FAB_ENG',NOTIFICATION_USER_ID$,'X') Recipients<1, -1> = XLATE('NOTIFICATION','RETURN_TO_FAB_ENG',NOTIFICATION_USER_ID$,'X')
Recipients<1, -1> = XLATE('NOTIFICATION','RETURN_TO_FAB_MANUF',NOTIFICATION_USER_ID$,'X') Recipients<1, -1> = XLATE('NOTIFICATION','RETURN_TO_FAB_MANUF',NOTIFICATION_USER_ID$,'X')
Recipients<1, -1> = XLATE('NOTIFICATION','RETURN_TO_FAB_GENERAL',NOTIFICATION_USER_ID$,'X')
Recipients<1, -1> = RTFRecord<RETURN_TO_FAB_LOTS_REQUESTOR_USER_ID$> Recipients<1, -1> = RTFRecord<RETURN_TO_FAB_LOTS_REQUESTOR_USER_ID$>
SentFrom = 'OI_ADMIN' SentFrom = 'OI_ADMIN'
Subject = 'Return To Fab Form Updated' Subject = 'Return To Fab Form Updated'
@ -826,4 +822,3 @@ end service

View File

@ -45,9 +45,9 @@ $insert RDS_EQUATES
$insert SCAN_SETUP $insert SCAN_SETUP
Declare Function Scan_Services, Database_Services, QA_Services, Datetime, RDS_Services, SRP_Array, SRP_Stopwatch Declare Function Scan_Services, Database_Services, QA_Services, Datetime, RDS_Services, SRP_Array, SRP_Stopwatch
Declare function Logging_Services, Environment_Services, GetTickCount Declare function Logging_Services, Environment_Services
Declare Subroutine Scan_Services, Database_Services, QA_Services, obj_WO_Mat_Log, SRP_Stopwatch Declare Subroutine Scan_Services, Database_Services, QA_Services, obj_WO_Mat_Log, SRP_Stopwatch
Declare Subroutine Logging_Services, Mona_Services Declare Subroutine Logging_Services
LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\ScanAPI\APIResponseTime'; //Define the directory where the log will be saved to. This happens the first time of the day that the log is written to. LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\ScanAPI\APIResponseTime'; //Define the directory where the log will be saved to. This happens the first time of the day that the log is written to.
LogDate = Oconv(Date(), 'D4/') LogDate = Oconv(Date(), 'D4/')
@ -58,13 +58,6 @@ LogFileName = LogDate[7, 4] : '-' : LogDate[1, 2] : '-' : LogDate[4, 2] : '
Headers = 'Logging DTM' : @FM : 'API' : @FM : 'ResponseTime' : @FM : 'ScanID' : @FM : 'ScanData' : @VM : 'StatusCode' ; //Define the column names in the log file, delimited by a Field Mark. Headers = 'Logging DTM' : @FM : 'API' : @FM : 'ResponseTime' : @FM : 'ScanID' : @FM : 'ScanData' : @VM : 'StatusCode' ; //Define the column names in the log file, delimited by a Field Mark.
objLog = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, ',', Headers, '', False$, False$); //Actually creates the log. objLog = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, ',', Headers, '', False$, False$); //Actually creates the log.
IsProd = Environment_Services('IsProd')
If IsProd EQ True$ then
MonaResource = 'GRP_OPENINSIGHT_MES_OP_FE_SCANAPI'
end else
MonaResource = 'GRP_OPENINSIGHT_MES_OP_FE_DEV_SCANAPI'
end
GoToAPI else GoToAPI else
// The specific resource endpoint doesn't have a API handler yet. // The specific resource endpoint doesn't have a API handler yet.
HTTP_Services('SetResponseStatus', 200, 'This is a valid endpoint but a web API handler has not yet been created.') HTTP_Services('SetResponseStatus', 200, 'This is a valid endpoint but a web API handler has not yet been created.')
@ -79,25 +72,16 @@ Return Response OR ''
API scan.POST API scan.POST
StartTick = GetTickCount()
MetricName = 'SCAN_POST'
SRP_Stopwatch('Reset') SRP_Stopwatch('Reset')
SRP_Stopwatch('Start', 'SCAN_POST_RESPONSE_TIME') SRP_Stopwatch('Start', 'SCAN_POST_RESPONSE_TIME')
ScanID = Scan_Services('CreateScansRow') ScanID = Scan_Services('CreateScansRow')
If Error_Services('NoError') then If Error_Services('NoError') then
StatusCode = 201 StatusCode = 201
GoSub CreateHALItem GoSub CreateHALItem
Mona_Services('SendStatus', MonaResource, MetricName, 'OK')
end else end else
Message = Error_Services('GetMessage') Message = Error_Services('GetMessage')
HTTP_Services('SetResponseStatus', 500, Message) HTTP_Services('SetResponseStatus', 500, Message)
Mona_Services('SendStatus', MonaResource, MetricName, 'CRITICAL')
end end
EndTick = GetTickCount()
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
SRP_Stopwatch('Stop', 'SCAN_POST_RESPONSE_TIME') SRP_Stopwatch('Stop', 'SCAN_POST_RESPONSE_TIME')
TotalPostResponseTime = SRP_Stopwatch('GetData', 'SCAN_POST_RESPONSE_TIME') TotalPostResponseTime = SRP_Stopwatch('GetData', 'SCAN_POST_RESPONSE_TIME')
LogData = '' LogData = ''
@ -116,9 +100,6 @@ end api
API scan.ID.POST API scan.ID.POST
StartTick = GetTickCount()
MetricName = 'SCAN_ID_POST'
SRP_Stopwatch('Reset') SRP_Stopwatch('Reset')
SRP_Stopwatch('Start', 'SCAN_ID_POST_RESPONSE_TIME') SRP_Stopwatch('Start', 'SCAN_ID_POST_RESPONSE_TIME')
ScanID = EndpointSegment ScanID = EndpointSegment
@ -131,20 +112,13 @@ API scan.ID.POST
If Error_Services('NoError') then If Error_Services('NoError') then
StatusCode = 200 StatusCode = 200
GoSub CreateHALItem GoSub CreateHALItem
Mona_Services('SendStatus', MonaResource, MetricName, 'OK')
end else end else
Message = Error_Services('GetMessage') Message = Error_Services('GetMessage')
HTTP_Services('SetResponseStatus', 400, Message) HTTP_Services('SetResponseStatus', 400, Message)
Mona_Services('SendStatus', MonaResource, MetricName, 'CRITICAL')
end end
end else end else
HTTP_Services('SetResponseStatus', 400, 'JSON object is missing from the request.') HTTP_Services('SetResponseStatus', 400, 'JSON object is missing from the request.')
Mona_Services('SendStatus', MonaResource, MetricName, 'WARNING')
end end
EndTick = GetTickCount()
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
SRP_Stopwatch('Stop', 'SCAN_ID_POST_RESPONSE_TIME') SRP_Stopwatch('Stop', 'SCAN_ID_POST_RESPONSE_TIME')
TotalPostResponseTime = SRP_Stopwatch('GetData', 'SCAN_ID_POST_RESPONSE_TIME') TotalPostResponseTime = SRP_Stopwatch('GetData', 'SCAN_ID_POST_RESPONSE_TIME')
LogData = '' LogData = ''
@ -169,19 +143,11 @@ end api
API scan.ID.HEAD API scan.ID.HEAD
API scan.ID.GET API scan.ID.GET
StartTick = GetTickCount()
MetricName = 'SCAN_ID_GET'
SRP_Stopwatch('Reset') SRP_Stopwatch('Reset')
SRP_Stopwatch('Start', 'SCAN_ID_GET_RESPONSE_TIME') SRP_Stopwatch('Start', 'SCAN_ID_GET_RESPONSE_TIME')
ScanID = EndpointSegment ScanID = EndpointSegment
StatusCode = 200 StatusCode = 200
GoSub CreateHALItem GoSub CreateHALItem
Mona_Services('SendStatus', MonaResource, MetricName, 'OK')
EndTick = GetTickCount()
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
SRP_Stopwatch('Stop', 'SCAN_ID_POST_RESPONSE_TIME') SRP_Stopwatch('Stop', 'SCAN_ID_POST_RESPONSE_TIME')
TotalGetResponseTime = SRP_Stopwatch('GetData', 'SCAN_ID_GET_RESPONSE_TIME') TotalGetResponseTime = SRP_Stopwatch('GetData', 'SCAN_ID_GET_RESPONSE_TIME')
LogData = '' LogData = ''
@ -200,9 +166,6 @@ end api
API scan.ID.DELETE API scan.ID.DELETE
StartTick = GetTickCount()
MetricName = 'SCAN_ID_DELETE'
SRP_Stopwatch('Reset') SRP_Stopwatch('Reset')
SRP_Stopwatch('Start', 'SCAN_ID_DELETE_RESPONSE_TIME') SRP_Stopwatch('Start', 'SCAN_ID_DELETE_RESPONSE_TIME')
ScanID = EndpointSegment ScanID = EndpointSegment
@ -213,25 +176,17 @@ API scan.ID.DELETE
Database_Services('DeleteDataRow', 'SCANS', ScanID, True$, False$) Database_Services('DeleteDataRow', 'SCANS', ScanID, True$, False$)
If Error_Services('NoError') then If Error_Services('NoError') then
HTTP_Services('SetResponseStatus', 200) HTTP_Services('SetResponseStatus', 200)
Mona_Services('SendStatus', MonaResource, MetricName, 'OK')
end else end else
Message = Error_Services('GetMessage') Message = Error_Services('GetMessage')
HTTP_Services('SetResponseStatus', 500, Message) HTTP_Services('SetResponseStatus', 500, Message)
Mona_Services('SendStatus', MonaResource, MetricName, 'CRITICAL')
end end
end else end else
HTTP_Services('SetResponseStatus', 403, 'This scan is already accepted and cannot be deleted.') HTTP_Services('SetResponseStatus', 403, 'This scan is already accepted and cannot be deleted.')
Mona_Services('SendStatus', MonaResource, MetricName, 'OK')
end end
end else end else
Message = Error_Services('GetMessage') Message = Error_Services('GetMessage')
HTTP_Services('SetResponseStatus', 404, Message) HTTP_Services('SetResponseStatus', 404, Message)
Mona_Services('SendStatus', MonaResource, MetricName, 'WARNING')
end end
EndTick = GetTickCount()
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
SRP_Stopwatch('Stop', 'SCAN_ID_DELETE_RESPONSE_TIME') SRP_Stopwatch('Stop', 'SCAN_ID_DELETE_RESPONSE_TIME')
TotalDeleteResponseTime = SRP_Stopwatch('GetData', 'SCAN_ID_DELETE_RESPONSE_TIME') TotalDeleteResponseTime = SRP_Stopwatch('GetData', 'SCAN_ID_DELETE_RESPONSE_TIME')
LogData = '' LogData = ''
@ -250,8 +205,6 @@ end api
API scan.ID.PATCH API scan.ID.PATCH
StartTick = GetTickCount()
MetricName = 'SCAN_ID_PATCH'
// This is where scans are ultimately accepted for final processing. We will need to determine which type // This is where scans are ultimately accepted for final processing. We will need to determine which type
// of scan this is (i.e. Location, Pre-Epi + Load, or Unload). This will be determined by the data coming in and the // of scan this is (i.e. Location, Pre-Epi + Load, or Unload). This will be determined by the data coming in and the
@ -279,17 +232,14 @@ API scan.ID.PATCH
If Error_Services('NoError') then If Error_Services('NoError') then
StatusCode = 200 StatusCode = 200
GoSub CreateHALItem GoSub CreateHALItem
Mona_Services('SendStatus', MonaResource, MetricName, 'OK')
end else end else
Message = Error_Services('GetMessage') Message = Error_Services('GetMessage')
HTTP_Services('SetResponseStatus', 500, Message) HTTP_Services('SetResponseStatus', 500, Message)
Mona_Services('SendStatus', MonaResource, MetricName, 'CRITICAL')
end end
SRP_JSON(hBody, 'Release') SRP_JSON(hBody, 'Release')
end else end else
HTTP_Services('SetResponseStatus', 400, 'JSON object is missing from the request.') HTTP_Services('SetResponseStatus', 400, 'JSON object is missing from the request.')
Mona_Services('SendStatus', MonaResource, MetricName, 'WARNING')
end end
end else end else
ScanNotAcceptableReason = SRP_JSON(objResource, 'GetValue', 'scan.notAcceptableReason') ScanNotAcceptableReason = SRP_JSON(objResource, 'GetValue', 'scan.notAcceptableReason')
@ -299,17 +249,11 @@ API scan.ID.PATCH
end else end else
Message = 'Unable to parse the JSON scan resource.' Message = 'Unable to parse the JSON scan resource.'
HTTP_Services('SetResponseStatus', 400, Message) HTTP_Services('SetResponseStatus', 400, Message)
Mona_Services('SendStatus', MonaResource, MetricName, 'WARNING')
end end
end else end else
Message = Error_Services('GetMessage') Message = Error_Services('GetMessage')
HTTP_Services('SetResponseStatus', 404, Message) HTTP_Services('SetResponseStatus', 404, Message)
Mona_Services('SendStatus', MonaResource, MetricName, 'WARNING')
end end
EndTick = GetTickCount()
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
SRP_Stopwatch('Stop', 'SCAN_ID_PATCH_RESPONSE_TIME') SRP_Stopwatch('Stop', 'SCAN_ID_PATCH_RESPONSE_TIME')
TotalPatchResponseTime = SRP_Stopwatch('GetData', 'SCAN_ID_PATCH_RESPONSE_TIME') TotalPatchResponseTime = SRP_Stopwatch('GetData', 'SCAN_ID_PATCH_RESPONSE_TIME')
LogData = '' LogData = ''
@ -328,8 +272,6 @@ end api
API scan.ID.PUT API scan.ID.PUT
StartTick = GetTickCount()
MetricName = 'SCAN_ID_PUT'
SRP_Stopwatch('Reset') SRP_Stopwatch('Reset')
SRP_Stopwatch('Start', 'SCAN_ID_PUT_RESPONSE_TIME') SRP_Stopwatch('Start', 'SCAN_ID_PUT_RESPONSE_TIME')
@ -372,25 +314,17 @@ API scan.ID.PUT
Database_Services('WriteDataRow', 'SCANS', ScanID, ScanRow, True$, False$, True$) Database_Services('WriteDataRow', 'SCANS', ScanID, ScanRow, True$, False$, True$)
If Error_Services('NoError') then If Error_Services('NoError') then
GoSub CreateHALItem GoSub CreateHALItem
Mona_Services('SendStatus', MonaResource, MetricName, 'OK')
end else end else
Message = Error_Services('GetMessage') Message = Error_Services('GetMessage')
HTTP_Services('SetResponseStatus', 500, Message) HTTP_Services('SetResponseStatus', 500, Message)
Mona_Services('SendStatus', MonaResource, MetricName, 'CRITICAL')
end end
SRP_JSON(hBody, 'Release') SRP_JSON(hBody, 'Release')
end else end else
HTTP_Services('SetResponseStatus', 400, 'Unable to parse the scanData JSON.') HTTP_Services('SetResponseStatus', 400, 'Unable to parse the scanData JSON.')
Mona_Services('SendStatus', MonaResource, MetricName, 'WARNING')
end end
end else end else
HTTP_Services('SetResponseStatus', 400, 'JSON object is missing from the request.') HTTP_Services('SetResponseStatus', 400, 'JSON object is missing from the request.')
Mona_Services('SendStatus', MonaResource, MetricName, 'WARNING')
end end
EndTick = GetTickCount()
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
SRP_Stopwatch('Stop', 'SCAN_ID_PUT_RESPONSE_TIME') SRP_Stopwatch('Stop', 'SCAN_ID_PUT_RESPONSE_TIME')
TotalPutResponseTime = SRP_Stopwatch('GetData', 'SCAN_ID_PUT_RESPONSE_TIME') TotalPutResponseTime = SRP_Stopwatch('GetData', 'SCAN_ID_PUT_RESPONSE_TIME')
LogData = '' LogData = ''
@ -405,6 +339,7 @@ API scan.ID.PUT
end end
LogData<6> = ResponseStatusCode LogData<6> = ResponseStatusCode
Logging_Services('AppendLog', objLog, LogData, @RM, @FM, False$) Logging_Services('AppendLog', objLog, LogData, @RM, @FM, False$)
end api end api
@ -443,4 +378,3 @@ CreateHALItem:
end end
return return

View File

@ -47,10 +47,9 @@ Declare Function Scan_Services, Memory_Services, Database_Services, SRP_JSON,
Declare Function QA_Services, Error_Services, Security_Services, SRP_Array, obj_WO_Mat, Memberof, Override_Log_Services Declare Function QA_Services, Error_Services, Security_Services, SRP_Array, obj_WO_Mat, Memberof, Override_Log_Services
Declare Function Keyboard_Sim_Services, Environment_Services, Logging_Services, Reactor_Services, Supplement_Services Declare Function Keyboard_Sim_Services, Environment_Services, Logging_Services, Reactor_Services, Supplement_Services
Declare function Test_Run_Services, Lot_Services, WO_MAT_Services, Reactor_Log_Services, Schedule_Services Declare function Test_Run_Services, Lot_Services, WO_MAT_Services, Reactor_Log_Services, Schedule_Services
Declare function GetTickCount
Declare Subroutine Scan_Services, Memory_Services, Database_Services, SRP_JSON, QA_Services, Error_Services Declare Subroutine Scan_Services, Memory_Services, Database_Services, SRP_JSON, QA_Services, Error_Services
Declare Subroutine obj_WO_Mat_Log, Tool_Parms_Services, RDS_Services, Logging_Services, Supplement_Services Declare Subroutine obj_WO_Mat_Log, Tool_Parms_Services, RDS_Services, Logging_Services, Supplement_Services
Declare Subroutine Test_Run_Services, WO_MAT_Services, Reactor_Log_Services, Schedule_Services, Mona_Services Declare Subroutine Test_Run_Services, WO_MAT_Services, Reactor_Log_Services, Schedule_Services
Equ CRLF$ to \0D0A\ Equ CRLF$ to \0D0A\
@ -62,13 +61,6 @@ Headers = 'Logging DTM' : @FM : 'RDS Key ID' : @FM : 'User' : @FM : 'CurrSta
objLog = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, Comma$, Headers, '', False$, False$) objLog = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, Comma$, Headers, '', False$, False$)
LoggingDTM = LogDate : ' ' : LogTime ; // Logging DTM LoggingDTM = LogDate : ' ' : LogTime ; // Logging DTM
IsProd = Environment_Services('IsProd')
If IsProd EQ True$ then
MonaResource = 'GRP_OPENINSIGHT_MES_OP_FE_SCANSERVICES'
end else
MonaResource = 'GRP_OPENINSIGHT_MES_OP_FE_DEV_SCANSERVICES'
end
GoToService else GoToService else
Error_Services('Add', Service : ' is not a valid service request within the ' : ServiceModule : ' module.') Error_Services('Add', Service : ' is not a valid service request within the ' : ServiceModule : ' module.')
end end
@ -208,8 +200,6 @@ end service
// Returns the database row from the SCANS table for the indicated Scan ID. The default format is MultiValue. // Returns the database row from the SCANS table for the indicated Scan ID. The default format is MultiValue.
//---------------------------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------------------------
Service GetScansRow(ScanID, ReturnJSON) Service GetScansRow(ScanID, ReturnJSON)
StartTick = GetTickCount()
MetricName = 'GetScansRow'
ScansRow = '' ScansRow = ''
@ -224,8 +214,6 @@ Service GetScansRow(ScanID, ReturnJSON)
Response = ScansRow Response = ScansRow
EndTick = GetTickCount()
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
end service end service
@ -235,8 +223,6 @@ end service
// Returns the database row from the SCANS table for the indicated Scan ID. The default format is MultiValue. // Returns the database row from the SCANS table for the indicated Scan ID. The default format is MultiValue.
//---------------------------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------------------------
Service SetScansRow(ScanID, ScansRow) Service SetScansRow(ScanID, ScansRow)
StartTick = GetTickCount()
MetricName = 'SetScansRow'
If (ScanID NE '') AND (ScansRow NE '') then If (ScanID NE '') AND (ScansRow NE '') then
Database_Services('WriteDataRow', 'SCANS', ScanID, ScansRow) Database_Services('WriteDataRow', 'SCANS', ScanID, ScansRow)
@ -244,8 +230,6 @@ Service SetScansRow(ScanID, ScansRow)
Error_Services('Add', 'ScanID or ScansRow argument was missing in the ' : Service : ' service.') Error_Services('Add', 'ScanID or ScansRow argument was missing in the ' : Service : ' service.')
end end
EndTick = GetTickCount()
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
end service end service
@ -258,8 +242,6 @@ end service
// evaluated on a case by case basis. // evaluated on a case by case basis.
//---------------------------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------------------------
Service ProcessScanData(ScanID, ScanJSON) Service ProcessScanData(ScanID, ScanJSON)
StartTick = GetTickCount()
MetricName = 'ProcessScanData'
If ( (ScanID NE '') AND (ScanJSON NE '') ) then If ( (ScanID NE '') AND (ScanJSON NE '') ) then
hScanJSON = '' hScanJSON = ''
@ -1305,8 +1287,6 @@ Service ProcessScanData(ScanID, ScanJSON)
Error_Services('Add', 'ScanID or ScanJSON argument was missing in the ' : Service : ' service.') Error_Services('Add', 'ScanID or ScanJSON argument was missing in the ' : Service : ' service.')
end end
EndTick = GetTickCount()
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
end service end service
@ -1315,9 +1295,6 @@ end service
// //
//---------------------------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------------------------
Service AcceptScan(ScanID, ScanJSON) Service AcceptScan(ScanID, ScanJSON)
StartTick = GetTickCount()
MetricName = 'AcceptScan'
If ( (ScanID NE '') and (ScanJSON NE '') ) then If ( (ScanID NE '') and (ScanJSON NE '') ) then
hBody = '' hBody = ''
ParseResponse = SRP_JSON(hBody, 'PARSE', ScanJSON) ParseResponse = SRP_JSON(hBody, 'PARSE', ScanJSON)
@ -1672,8 +1649,6 @@ Service AcceptScan(ScanID, ScanJSON)
Error_Services('Add', 'ScanID or ScanJSON argument was missing in the ' : Service : ' service.') Error_Services('Add', 'ScanID or ScanJSON argument was missing in the ' : Service : ' service.')
end end
EndTick = GetTickCount()
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
end service end service
//---------------------------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------------------------
@ -1684,8 +1659,6 @@ end service
// HAL+JSON properties will be added to the JSON object. // HAL+JSON properties will be added to the JSON object.
//---------------------------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------------------------
Service ConvertMVScanToJSON(ScanID, mvScan, itemURL) Service ConvertMVScanToJSON(ScanID, mvScan, itemURL)
StartTick = GetTickCount()
MetricName = 'ConvertMVScanToJSON'
jsonScan = '' jsonScan = ''
@ -2187,8 +2160,6 @@ Service ConvertMVScanToJSON(ScanID, mvScan, itemURL)
Response = jsonScan Response = jsonScan
EndTick = GetTickCount()
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
end service end service
//---------------------------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------------------------
@ -2425,3 +2396,9 @@ ClearCursors:
return return

View File

@ -55,24 +55,16 @@ EQU NOTIFICATION_PERIOD$ TO 12
Declare subroutine Error_Services, Schedule_Services, Memory_Services, RList, Database_Services, Logging_Services Declare subroutine Error_Services, Schedule_Services, Memory_Services, RList, Database_Services, Logging_Services
Declare subroutine Btree.Extract, Set_Status, Reduce, FSMsg, Messaging_Services, obj_Notes, Make.List Declare subroutine Btree.Extract, Set_Status, Reduce, FSMsg, Messaging_Services, obj_Notes, Make.List
Declare subroutine Mona_Services
Declare function SRP_Array, Schedule_Services, Memory_Services, Database_Services, SRP_Sort_Array, Datetime Declare function SRP_Array, Schedule_Services, Memory_Services, Database_Services, SRP_Sort_Array, Datetime
Declare function Epi_Part_Services, SRP_Math, SRP_Hash, obj_Prod_Spec, Logging_Services, Environment_Services Declare function Epi_Part_Services, SRP_Math, SRP_Hash, obj_Prod_Spec, Logging_Services, Environment_Services
Declare function Work_Order_Services, RTI_CreateGUID, Reactor_Services, Schedule_Services, NextKey, SRP_Datetime Declare function Work_Order_Services, RTI_CreateGUID, Reactor_Services, Schedule_Services, NextKey, SRP_Datetime
Declare function SRP_Time, Lsl_Users_Services, GetTickCount Declare function SRP_Time, Lsl_Users_Services
Date = Oconv(Date(), 'D4/') Date = Oconv(Date(), 'D4/')
LogFileName = Date[7, 4] : '-' : Date[1, 2] : '-' : Date[4, 2] : ' Scheduler Log.csv' LogFileName = Date[7, 4] : '-' : Date[1, 2] : '-' : Date[4, 2] : ' Scheduler Log.csv'
Headers = 'Logging DTM' : @FM : 'Service Step' : @FM : 'Service Notes' Headers = 'Logging DTM' : @FM : 'Service Step' : @FM : 'Service Notes'
ColumnWidths = 20 : @FM : 30 : @FM : 150 ColumnWidths = 20 : @FM : 30 : @FM : 150
IsProd = Environment_Services('IsProd')
If IsProd EQ True$ then
MonaResource = 'GRP_OPENINSIGHT_MES_OP_FE_SCHEDULESERVICES'
end else
MonaResource = 'GRP_OPENINSIGHT_MES_OP_FE_DEV_SCHEDULESERVICES'
end
GoToService else GoToService else
Error_Services('Set', Service : ' is not a valid service request within the ' : ServiceModule : ' services module.') Error_Services('Set', Service : ' is not a valid service request within the ' : ServiceModule : ' services module.')
end end
@ -803,8 +795,6 @@ end service
Service GetCurrentEvent(ReactNo) Service GetCurrentEvent(ReactNo)
StartTick = GetTickCount()
MetricName = 'GetCurrentEvent'
SchedDetKey = '' SchedDetKey = ''
If ReactNo NE '' then If ReactNo NE '' then
@ -824,14 +814,9 @@ Service GetCurrentEvent(ReactNo)
GoSub ClearCursors GoSub ClearCursors
end end
EndTick = GetTickCount()
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
end service end service
Service CurrentEventIsBlock(ReactNo) Service CurrentEventIsBlock(ReactNo)
StartTick = GetTickCount()
MetricName = 'CurrentEventIsBlock'
If ReactNo NE '' then If ReactNo NE '' then
CurrentSchedDetKey = Schedule_Services('GetCurrentEvent', ReactNo) CurrentSchedDetKey = Schedule_Services('GetCurrentEvent', ReactNo)
@ -853,15 +838,9 @@ Service CurrentEventIsBlock(ReactNo)
ErrorMsg = 'Error in service ':Service:' module. Invalid reactor number.' ErrorMsg = 'Error in service ':Service:' module. Invalid reactor number.'
Error_Services('Add', ErrorMsg) Error_Services('Add', ErrorMsg)
end end
EndTick = GetTickCount()
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
end service end service
Service GetNextEvent(ReactNo) Service GetNextEvent(ReactNo)
StartTick = GetTickCount()
MetricName = 'GetNextEvent'
SchedDetKey = '' SchedDetKey = ''
If ReactNo NE '' then If ReactNo NE '' then
CurrDTM = Datetime() CurrDTM = Datetime()
@ -891,9 +870,6 @@ Service GetNextEvent(ReactNo)
end end
GoSub ClearCursors GoSub ClearCursors
end end
EndTick = GetTickCount()
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
end service end service
Service GetEngagedEvent(ReactNo) Service GetEngagedEvent(ReactNo)
@ -943,9 +919,6 @@ Service GetLastEngagedEvent(ReactNo)
end service end service
Service NextEventIsSamePsn(ReactNo) Service NextEventIsSamePsn(ReactNo)
StartTick = GetTickCount()
MetricName = 'NextEventIsSamePsn'
Response = False$ Response = False$
If ReactNo NE '' then If ReactNo NE '' then
CurrentSchedDetKey = Schedule_Services('GetCurrentEvent', ReactNo) CurrentSchedDetKey = Schedule_Services('GetCurrentEvent', ReactNo)
@ -989,15 +962,9 @@ Service NextEventIsSamePsn(ReactNo)
ErrorMsg = 'Error in service ':Service:' module. Invalid reactor number.' ErrorMsg = 'Error in service ':Service:' module. Invalid reactor number.'
Error_Services('Add', ErrorMsg) Error_Services('Add', ErrorMsg)
end end
EndTick = GetTickCount()
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
end service end service
Service NextEventIsBlock(ReactNo) Service NextEventIsBlock(ReactNo)
StartTick = GetTickCount()
MetricName = 'NextEventIsBlock'
If ReactNo NE '' then If ReactNo NE '' then
NextSchedDetKey = Schedule_Services('GetNextEvent', ReactNo) NextSchedDetKey = Schedule_Services('GetNextEvent', ReactNo)
@ -1019,9 +986,6 @@ Service NextEventIsBlock(ReactNo)
ErrorMsg = 'Error in service ':Service:' module. Invalid reactor number.' ErrorMsg = 'Error in service ':Service:' module. Invalid reactor number.'
Error_Services('Add', ErrorMsg) Error_Services('Add', ErrorMsg)
end end
EndTick = GetTickCount()
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
end service end service
//---------------------------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------------------------
@ -3597,4 +3561,3 @@ CreateScheduleChangeNotification:
return return

View File

@ -17,7 +17,6 @@ Subroutine Service_Manager_Debugger_Intercept(Void)
History : (Date, Initials, Notes) History : (Date, Initials, Notes)
07/25/23 djs Original programmer. 07/25/23 djs Original programmer.
06/04/25 djs Added LSL note creation (and email forwarding) to notify OI_ADMIN users when invoked.
***********************************************************************************************************************/ ***********************************************************************************************************************/
@ -25,58 +24,24 @@ Subroutine Service_Manager_Debugger_Intercept(Void)
$insert APP_INSERTS $insert APP_INSERTS
$insert RTI_DEBUG_COMMON $insert RTI_DEBUG_COMMON
$insert ENVIRON_CONSTANTS
Declare function Environment_Services, Logging_Services, Environment_Services, GetCommandLine, Datetime Declare function Environment_Services, Logging_Services
Declare subroutine Logging_Services, obj_Notes, Set_Env Declare subroutine Logging_Services
Main: LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\ServiceManager'
LogDate = Oconv(Date(), 'D4/')
// Log event in .\LogFiles\ServiceManager\<Date> OEngine Log.csv LogTime = Oconv(Time(), 'MTS')
LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\ServiceManager' LogFileName = LogDate[7, 4] : '-' : LogDate[1, 2] : '-' : LogDate[4, 2] : ' OEngine Log.csv'
LogDate = Oconv(Date(), 'D4/') Headers = 'Stored Proc Status' : @FM : 'Stored Proc Status Code' : @FM : 'Current Program' : @FM : 'Call Depth' : @FM : 'Line No' : @FM : 'Call Stack'
LogTime = Oconv(Time(), 'MTS') objLog = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, ',', Headers, '', False$, False$)
LogFileName = LogDate[7, 4] : '-' : LogDate[1, 2] : '-' : LogDate[4, 2] : ' OEngine Log.csv' LogData = ''
Headers = 'Stored Proc Status' : @FM : 'Stored Proc Status Code' : @FM : 'Current Program' : @FM LogData<1> = SPStatus@
Headers := 'Call Depth' : @FM : 'Line No' : @FM : 'Call Stack' LogData<2> = SPStatCode@
objLog = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, ',', Headers, '', False$, False$) LogData<3> = Curr_Program@
LogData = '' LogData<4> = CallDepth@
LogData<1> = spStatus@ LogData<5> = LineNo@
LogData<2> = spStatCode@ LogData<6> = CallStack@
LogData<3> = curr_Program@ Logging_Services('AppendLog', objLog, LogData, @RM, @FM, '', '', '')
LogData<4> = callDepth@
LogData<5> = lineNo@
LogData<6> = callStack@
Logging_Services('AppendLog', objLog, LogData, @RM, @FM, '', '', '')
// Send an LSL message to FI admins to alert them. This is forward to their email address if configured in
// their LSL_USERS record.
CmdLine = GetCommandLine()
EngIndex = Index(CmdLine, '/S=', 1)
EngNo = CmdLine[EngIndex + 3, 'F ']
Server = Environment_Services('GetServer')
Recipients = ''
SentFrom = 'SYSTEM'
Subject = 'Service Manager Debugger Intercept Invoked'
Message = OConv(Datetime(), 'DT2/^H')
Message<2> = 'RevEngineHost (OEngine) ':EngNo:' encountered a runtime error on server ':Server
Message<3> = 'Stored Procedure Status: ':spStatus@
StatCodes = spStatCode@
Swap Char(0) with ',' in StatCodes
Swap Char(23) with '' in StatCodes
Message<4> = 'Stored Procedure Status Code: ':StatCodes
Message<5> = 'Current Program: ':curr_Program@
Message<6> = 'Call Depth: ':callDepth@
Message<7> = 'Line No: ':lineNo@
Message<8> = 'Call Stack: ':\0D0A\:callStack@
Swap @FM with \0D0A\ in Message
Swap @VM with ',' in Message
AttachWindow = ''
AttachKey = ''
SendToGroup = 'OI_SYSADMIN'
Parms = Recipients:@RM:SentFrom:@RM:Subject:@RM:Message:@RM:AttachWindow:@RM:AttachKey:@RM:SendToGroup
obj_Notes('Create',Parms)
Return Return

View File

@ -27,30 +27,19 @@ Function Service_Services(@Service, @Params)
#pragma precomp SRP_PreCompiler #pragma precomp SRP_PreCompiler
$Insert APP_INSERTS $insert LOGICAL
$Insert SERVICE_SETUP $insert SERVICE_SETUP
$Insert SERVICES_EQUATES $insert SERVICES_EQUATES
$Insert RLIST_EQUATES $insert RLIST_EQUATES
$Insert SQL_REQUESTS_EQUATES $insert SQL_REQUESTS_EQUATES
$Insert PROC_QUEUE_EQUATES $Insert PROC_QUEUE_EQUATES
$Insert PROC_QUEUE_FAILED_EQUATES
Equ Comma$ to ','
Common /ServiceServices/ Unused1@, Unused2@, Unused3@, Unused4@, Unused5@, Unused6@, Unused7@, Unused8@, Unused9@, Unused10@ Common /ServiceServices/ Unused1@, Unused2@, Unused3@, Unused4@, Unused5@, Unused6@, Unused7@, Unused8@, Unused9@, Unused10@
Declare function Service_Services, Memory_Services, SRP_List, SRP_FastArray, SRP_Array, Database_Services, Datetime Declare function Service_Services, Memory_Services, SRP_List, SRP_FastArray, SRP_Array, Database_Services, Datetime
Declare function GetTickCount, SRP_Decode, RTI_CreateGuid, UCase, Environment_services, Logging_Services Declare Function GetTickCount, SRP_Decode, RTI_CREATEGUID
Declare subroutine Service_Services, Memory_Services, SRP_List, SRP_FastArray, RList, Set_Status, Database_Services Declare subroutine Service_Services, Memory_Services, SRP_List, SRP_FastArray, RList, Set_Status, Database_Services
Declare Subroutine Yield, WinYield, Sleepery, Btree.Extract, Logging_Services, obj_Notes Declare Subroutine Yield, WinYield, Sleepery, Btree.Extract
LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\ProcQueue'
LogDate = Oconv(Date(), 'D4/')
LogTime = Oconv(Time(), 'MTS')
LogFileName = LogDate[7, 4] : '-' : LogDate[1, 2] : '-' : LogDate[4, 2] : ' Procedure Queue Log.csv'
Headers = 'Logging DTM' : @FM : 'Machine' : @FM : 'RequestKeyId' : @FM : 'Procedure' : @FM : 'Params' : @FM : 'Result' : @FM : 'Error Message'
objLog = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, Comma$, Headers, '', False$, False$)
LoggingDTM = LogDate : ' ' : LogTime ; // Logging DTM
GoToService else GoToService else
Error_Services('Add', Service : ' is not a valid service request within the ' : ServiceModule : ' services module.') Error_Services('Add', Service : ' is not a valid service request within the ' : ServiceModule : ' services module.')
@ -176,22 +165,18 @@ Service ProcessProcedureQueue()
ReadNext RequestKeyID else EOF = True$ ReadNext RequestKeyID else EOF = True$
Until EOF or Done Until EOF or Done
Lock hProcQueue, RequestKeyID then Lock hProcQueue, RequestKeyID then
DeleteRequest = True$
Server = Environment_Services('GetServer')
Done = True$ Done = True$
Database_Services('GetKeyIDLock', 'PROC_QUEUE', RequestKeyId) Database_Services('GetKeyIDLock', 'PROC_QUEUE', RequestKeyId)
RequestRow = Database_Services('ReadDataRow', 'PROC_QUEUE', RequestKeyID) RequestRow = Database_Services('ReadDataRow', 'PROC_QUEUE', RequestKeyID)
If RequestRow NE '' then If RequestRow NE '' then
Procedure = RequestRow<PROC_QUEUE.PROC_NAME$> Procedure = RequestRow<PROC_QUEUE.PROC_NAME$>
Procedure = UCase(Procedure)
Params = RequestRow<PROC_QUEUE.PARAMS$> Params = RequestRow<PROC_QUEUE.PARAMS$>
If Procedure NE '' then If Procedure NE '' then
Dim ProcParams(12) Dim ProcParams(11)
For each Param in Params using @VM setting pPos For each Param in Params using @VM setting pPos
ProcParams(pPos) = Param ProcParams(pPos) = Param
Next Param Next Param
NumArguments = DCount(Params, @VM) NumArguments = DCount(Params, @VM)
Begin Case Begin Case
Case NumArguments EQ 0 ; Call @Procedure() Case NumArguments EQ 0 ; Call @Procedure()
Case NumArguments EQ 1 ; Call @Procedure(ProcParams(1)) Case NumArguments EQ 1 ; Call @Procedure(ProcParams(1))
@ -209,58 +194,17 @@ Service ProcessProcedureQueue()
Error_Services('Add', 'Error in ':Service:' service. More than 11 arguments are not currently supported.') Error_Services('Add', 'Error in ':Service:' service. More than 11 arguments are not currently supported.')
End Case End Case
end end
If Error_Services('NoError') then
Swap @VM with ',' in Params Database_Services('DeleteDataRow', 'PROC_QUEUE', RequestKeyId, True$, False$) ; // This call will release the lock
LogData = LoggingDTM
LogData<2> = Server
LogData<3> = RequestKeyId
LogData<4> = Procedure
LogData<5> = Params
ErrCode = ''
If ( Get_Status(ErrCode) or Error_Services('HasError') ) then
NumAttempts = RequestRow<PROC_QUEUE.NUM_ATTEMPTS$> + 1
ErrorMessage = Error_Services('GetMessage')
If NumAttempts LT 3 then
DeleteRequest = False$
RequestRow<PROC_QUEUE.NUM_ATTEMPTS$> = NumAttempts
RequestRow<PROC_QUEUE.LAST_ATTEMPT_DTM$> = Datetime()
RequestRow<PROC_QUEUE.ERROR$> = 'Error_Services error message: ':ErrorMessage:' Get_Status error code: ':ErrCode
Database_Services('WriteDataRow', 'PROC_QUEUE', RequestKeyId, RequestRow, True$, False$, False$)
end else end else
// Notify OI_SYSADMIN group RequestRow<PROC_QUEUE.LAST_ATTEMPT_DTM$> = DateTime()
Recipients = '' RequestRow<PROC_QUEUE.ERROR$> = Error_Services('GetMessage')
SentFrom = 'SYSTEM' Database_Services('WriteDataRow', 'PROC_QUEUE', RequestKeyID, RequestRow, True$, False$, False$) ; // This call will release the lock
Subject = 'Background Procedure Queue Error'
Message = OConv(Datetime(), 'DT2/^H')
Message<2> = 'Error on server ':Server
Message<3> = 'Stored Procedure: ':Procedure
StatCodes = 'Parameters: ':Params
Message<4> = 'Error_Services error message: ':ErrorMessage
Message<5> = 'Get_Status error code: ':ErrCode
Swap @FM with \0D0A\ in Message
AttachWindow = ''
AttachKey = ''
SendToGroup = 'OI_SYSADMIN'
Parms = Recipients:@RM:SentFrom:@RM:Subject:@RM:Message:@RM:AttachWindow:@RM:AttachKey:@RM:SendToGroup
obj_Notes('Create',Parms)
// Move request to PROC_QUEUE_FAILED
RequestRow<PROC_QUEUE.NUM_ATTEMPTS$> = NumAttempts
RequestRow<PROC_QUEUE.LAST_ATTEMPT_DTM$> = Datetime()
RequestRow<PROC_QUEUE.ERROR$> = 'Error_Services error message: ':ErrorMessage:'Get_Status error code: ':ErrCode
Database_Services('WriteDataRow', 'PROC_QUEUE_FAILED', RequestKeyId, RequestRow, True$, False$, False$)
end end
LogData<6> = 'Failed'
LogData<7> = 'Error_Services error message: ':ErrorMessage:' Get_Status error code: ':ErrCode
end else end else
LogData<6> = 'Success' // Empty request, so delete it from the queue
Database_Services('DeleteDataRow', 'PROC_QUEUE', RequestKeyId, True$, False$) ; // This call will release the lock
end end
Logging_Services('AppendLog', objLog, LogData, @RM, @FM)
end
If DeleteRequest then
Database_Services('DeleteDataRow', 'PROC_QUEUE', RequestKeyId, True$, False$)
end
Unlock hProcQueue, RequestKeyID else Null
end end
Repeat Repeat
end end
@ -273,6 +217,7 @@ Service PostProcedure(ProcedureName, Params, Critical=BOOLEAN)
If Critical EQ '' then Critical = True$ If Critical EQ '' then Critical = True$
PostToQueue = True$ PostToQueue = True$
If (ProcedureName NE '') then If (ProcedureName NE '') then
If (Params NE '') then
If Not(Critical) then If Not(Critical) then
// Check if there is already a matching request in the queue before posting another one. // Check if there is already a matching request in the queue before posting another one.
Query = 'PROC_NAME':@VM:ProcedureName:@FM Query = 'PROC_NAME':@VM:ProcedureName:@FM
@ -299,6 +244,9 @@ Service PostProcedure(ProcedureName, Params, Critical=BOOLEAN)
RequestRow<PROC_QUEUE.ENTRY_DTM$> = Datetime() RequestRow<PROC_QUEUE.ENTRY_DTM$> = Datetime()
Database_Services('WriteDataRow', 'PROC_QUEUE', RequestKeyID, RequestRow, True$, False$, False$) Database_Services('WriteDataRow', 'PROC_QUEUE', RequestKeyID, RequestRow, True$, False$, False$)
end end
end else
Error_Services('Add', 'Error in ':Service:' service. Null Params passed in.')
end
end else end else
Error_Services('Add', 'Error in ':Service:' service. Null ProcedureName passed in.') Error_Services('Add', 'Error in ':Service:' service. Null ProcedureName passed in.')
end end
@ -306,98 +254,8 @@ Service PostProcedure(ProcedureName, Params, Critical=BOOLEAN)
return return
Service CleanFailedProcQueue(DaysToRetain)
hSysLists = Database_Services('GetTableHandle', 'SYSLISTS')
Lock hSysLists, ServiceKeyID then
LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\ProcQueue'
LogDate = Oconv(Date(), 'D4/')
LogTime = Oconv(Time(), 'MTS')
LogFileName = LogDate[7, 4] : '-' : LogDate[1, 2] : '-' : LogDate[4, 2] : ' CleanFailedProcQueue Log.csv'
Headers = 'Logging DTM' : @FM : 'Machine' : @FM : 'RequestKeyId' : @FM : 'Procedure' : @FM : 'Params'
Headers := @FM : 'Result' : @FM : 'Error Message'
objFailedProcQueueLog = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, Comma$, Headers, '', False$, False$)
LoggingDTM = LogDate : ' ' : LogTime ; // Logging DTM
Server = Environment_Services('GetServer')
LogData = ''
LogData<1> = LoggingDtm
LogData<2> = Server
LogData<6> = 'Begin CleanFailedProcQueue'
Logging_Services('AppendLog', objFailedProcQueueLog, LogData, @RM, @FM)
ErrorMsg = ''
If (DaysToRetain NE '') then
If Num(DaysToRetain) then
Open 'PROC_QUEUE_FAILED' to hTable then
Cutoff = Datetime() - DaysToRetain
Select hTable
EOF = False$
Loop
Readnext Key else EOF = True$
Until EOF
Read Rec from hTable, Key then
EntryDtm = Rec<PROC_QUEUE_FAILED.ENTRY_DTM$>
If (EntryDtm LT Cutoff) then
Delete hTable, Key then
LogData<1> = LoggingDtm
LogData<2> = Server
LogData<3> = Key
LogData<4> = Rec<PROC_QUEUE_FAILED.PROC_NAME$>
ProcFailedParams = Rec<PROC_QUEUE_FAILED.PARAMS$>
Convert @VM to '|' in ProcFailedParams
LogData<5> = ProcFailedParams
LogData<6> = 'Removed PROC_QUEUE_FAILED record.'
LogData<7> = Rec<PROC_QUEUE_FAILED.ERROR$>
Logging_Services('AppendLog', objFailedProcQueueLog, LogData, @RM, @FM)
end else
ErrorMsg = 'Error in ':Service:' service. Error deleting PROC_QUEUE_FAILED record ':Key:'.'
end
end else
LogData<1> = LoggingDtm
LogData<2> = Server
LogData<3> = Key
LogData<4> = Rec<PROC_QUEUE_FAILED.PROC_NAME$>
ProcFailedParams = Rec<PROC_QUEUE_FAILED.PARAMS$>
Convert @VM to '|' in ProcFailedParams
LogData<5> = ProcFailedParams
LogData<6> = 'Retaining PROC_QUEUE_FAILED record.'
LogData<7> = Rec<PROC_QUEUE_FAILED.ERROR$>
Logging_Services('AppendLog', objFailedProcQueueLog, LogData, @RM, @FM)
end
end else
ErrorMsg = 'Error in ':Service:' service. Error reading PROC_QUEUE_FAILED record ':Key:'.'
end
Repeat
end else
ErrorMsg = 'Error in ':Service:' service. Error opening PROC_QUEUE_FAILED table.'
end
end else
ErrorMsg = 'Error in ':Service:' service. DaysToRetain must be a number.'
end
end else
ErrorMsg = 'Error in ':Service:' service. Null DaysToRetain value passed in.'
end
If ErrorMsg NE '' then
LogData<1> = LoggingDtm
LogData<2> = Server
LogData<6> = ErrorMsg
Logging_Services('AppendLog', objFailedProcQueueLog, LogData, @RM, @FM)
end
LogData<1> = LoggingDtm
LogData<2> = Server
LogData<6> = 'End CleanFailedProcQueue'
Logging_Services('AppendLog', objFailedProcQueueLog, LogData, @RM, @FM)
Unlock hSysLists, ServiceKeyID else Null
end
end service
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Internal GoSubs /// Internal GoSubs
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

View File

@ -63,20 +63,12 @@ Equ COL$TOOL_ID to 10
Declare function obj_Prod_Spec, RDS_Services, Error_Services, Signature_Services, Memory_Services, obj_RDS_Test Declare function obj_Prod_Spec, RDS_Services, Error_Services, Signature_Services, Memory_Services, obj_RDS_Test
Declare function Database_Services, obj_WO_Mat, Dialog_Box, MemberOf, Msg, QA_Services, Datetime, Supplement_Services Declare function Database_Services, obj_WO_Mat, Dialog_Box, MemberOf, Msg, QA_Services, Datetime, Supplement_Services
Declare function Environment_Services, GetTickCount
Declare subroutine Error_Services, Popup, Memory_Services, SRP_Stopwatch, Set_Status, Database_Services, obj_WO_Mat Declare subroutine Error_Services, Popup, Memory_Services, SRP_Stopwatch, Set_Status, Database_Services, obj_WO_Mat
Declare subroutine Obj_Notes, Signature_Services, Obj_WO_Mat_Log, ErrMsg, Mona_Services Declare subroutine Obj_Notes, Signature_Services, Obj_WO_Mat_Log, ErrMsg
PSNKey = ServiceKeyID PSNKey = ServiceKeyID
ReactorKey = ServiceKeyID ReactorKey = ServiceKeyID
IsProd = Environment_Services('IsProd')
If IsProd EQ True$ then
MonaResource = 'GRP_OPENINSIGHT_MES_OP_FE_SIGNATURESERVICES'
end else
MonaResource = 'GRP_OPENINSIGHT_MES_OP_FE_DEV_SIGNATURESERVICES'
end
GoToService GoToService
Return Response or "" Return Response or ""
@ -143,8 +135,6 @@ end service
Service GetSigProfile(WOMatKey, UseCaching, RDSNo) Service GetSigProfile(WOMatKey, UseCaching, RDSNo)
StartTick = GetTickCount()
MetricName = 'GetSigProfile'
If UseCaching EQ '' then UseCaching = True$ If UseCaching EQ '' then UseCaching = True$
@ -185,8 +175,6 @@ Service GetSigProfile(WOMatKey, UseCaching, RDSNo)
SigDTMs = OCONV(SigDTMs,'DT4/^S') SigDTMs = OCONV(SigDTMs,'DT4/^S')
Response = SigProfile:@FM:Signatures:@FM:SigDTMs Response = SigProfile:@FM:Signatures:@FM:SigDTMs
EndTick = GetTickCount()
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
end service end service
@ -223,9 +211,6 @@ end service
Service CheckSigOrder(WOMatKey, CurrStage, UseCaching, RDSNo) Service CheckSigOrder(WOMatKey, CurrStage, UseCaching, RDSNo)
StartTick = GetTickCount()
MetricName = 'CheckSigOrder'
If UseCaching EQ '' then UseCachine = True$ If UseCaching EQ '' then UseCachine = True$
Response = False$ Response = False$
If RDSNo NE '' then If RDSNo NE '' then
@ -279,8 +264,6 @@ Service CheckSigOrder(WOMatKey, CurrStage, UseCaching, RDSNo)
Response = True$ Response = True$
end end
EndTick = GetTickCount()
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
End Service End Service
@ -2027,6 +2010,8 @@ Service QASigReady(RDSNo)
* Verify Unload Stage QA Metrology Tests * * Verify Unload Stage QA Metrology Tests *
****************************************** ******************************************
If ErrorMessage EQ '' then If ErrorMessage EQ '' then
DevelopmentFlag = Xlate('DEVELOPMENT', 'HGCV', 'STATUS', 'X')
If (DevelopmentFlag EQ True$) then
WOMatQAKey = WOMatKey WOMatQAKey = WOMatKey
WOMatQARec = Database_Services('ReadDataRow', 'WO_MAT_QA', WOMatQAKey) WOMatQARec = Database_Services('ReadDataRow', 'WO_MAT_QA', WOMatQAKey)
OutOfSpec = WOMatQARec<WO_MAT_QA_OUT_OF_SPEC$> OutOfSpec = WOMatQARec<WO_MAT_QA_OUT_OF_SPEC$>
@ -2039,6 +2024,7 @@ Service QASigReady(RDSNo)
Next FailReason Next FailReason
end end
end end
end
************************************************************************ ************************************************************************
* Prompt user to validate the Process Specification Stage Instructions * * Prompt user to validate the Process Specification Stage Instructions *
@ -2858,3 +2844,4 @@ GetMostRecentSig:
return return

View File

@ -56,16 +56,9 @@ $Insert NOTIFICATION_EQUATES
Equ COMMA$ to ',' Equ COMMA$ to ','
Declare function Database_Services, Supplement_Services, Rti_Createguid, SRP_Array, Datetime, Signature_Services Declare function Database_Services, Supplement_Services, Rti_Createguid, SRP_Array, Datetime, Signature_Services
Declare function Environment_Services, Logging_Services, Select_Into, GetTickCount Declare function Environment_Services, Logging_Services, Select_Into
Declare subroutine Database_Services, Rds_Services, Supplement_Services, Logging_Services, Set_Status, SRP_Stopwatch Declare subroutine Database_Services, Rds_Services, Supplement_Services, Logging_Services, Set_Status, SRP_Stopwatch
Declare subroutine Btree.Extract, obj_Notes, Mona_Services Declare subroutine Btree.Extract, obj_Notes
IsProd = Environment_Services('IsProd')
If IsProd EQ True$ then
MonaResource = 'GRP_OPENINSIGHT_MES_OP_FE_SUPPLEMENTSERVICES'
end else
MonaResource = 'GRP_OPENINSIGHT_MES_OP_FE_DEV_SUPPLEMENTSERVICES'
end
GoToService else GoToService else
Error_Services('Add', Service : ' is not a valid service request within the ' : ServiceModule : ' module.') Error_Services('Add', Service : ' is not a valid service request within the ' : ServiceModule : ' module.')
@ -415,8 +408,6 @@ end service
// //
//---------------------------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------------------------
Service AcknowledgeSupplement(SupplID, EntryUser) Service AcknowledgeSupplement(SupplID, EntryUser)
StartTick = GetTickCount()
MetricName = 'AcknowledgeSupplement'
If ( (SupplID NE '') and (EntryUser NE '') ) then If ( (SupplID NE '') and (EntryUser NE '') ) then
OldRec = Xlate('SUPPLEMENTS', SupplID, '', 'X', '') OldRec = Xlate('SUPPLEMENTS', SupplID, '', 'X', '')
@ -442,8 +433,6 @@ Service AcknowledgeSupplement(SupplID, EntryUser)
Error_Services('Add', 'SupplID or EntryUser was missing in the ' : Service : ' service.') Error_Services('Add', 'SupplID or EntryUser was missing in the ' : Service : ' service.')
end end
EndTick = GetTickCount()
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
end service end service
@ -458,8 +447,6 @@ end service
// //
//---------------------------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------------------------
Service UnacknowledgedSupplementCheck(LotType=LOTTYPES, LotID, Stage=STAGES) Service UnacknowledgedSupplementCheck(LotType=LOTTYPES, LotID, Stage=STAGES)
StartTick = GetTickCount()
MetricName = 'UnacknowledgedSupplementCheck'
UnackList = '' UnackList = ''
Response = False$ Response = False$
@ -495,8 +482,6 @@ Service UnacknowledgedSupplementCheck(LotType=LOTTYPES, LotID, Stage=STAGES)
If UnackList NE '' then Response = UnackList If UnackList NE '' then Response = UnackList
EndTick = GetTickCount()
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
end service end service
@ -511,8 +496,6 @@ end service
// //
//---------------------------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------------------------
Service LogSupplementChange(SupplementRec, EditEvent, EntryUser) Service LogSupplementChange(SupplementRec, EditEvent, EntryUser)
StartTick = GetTickCount()
MetricName = 'LogSupplementChange'
If ( (SupplementRec NE '') and (EditEvent NE '') and (EntryUser NE '') ) then If ( (SupplementRec NE '') and (EditEvent NE '') and (EntryUser NE '') ) then
SupplementText = SupplementRec<SUPPLEMENTS_SUPPL_TEXT$> SupplementText = SupplementRec<SUPPLEMENTS_SUPPL_TEXT$>
@ -530,8 +513,6 @@ Service LogSupplementChange(SupplementRec, EditEvent, EntryUser)
Error_Services('Add', 'LotType, LotID, or Stage was missing in the ' : Service : ' service.') Error_Services('Add', 'LotType, LotID, or Stage was missing in the ' : Service : ' service.')
end end
EndTick = GetTickCount()
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
end service end service
@ -632,4 +613,3 @@ Service SendNotifications(RDSList, EditEvent, Instructions, EntryUser)
end service end service

View File

@ -10,10 +10,9 @@ $Insert TEST_RUN_OBJ_EQUATES
$Insert LOT_EQUATES $Insert LOT_EQUATES
$Insert LOT_OPERATION_EQUATES $Insert LOT_OPERATION_EQUATES
Declare function Nextkey, Error_Services, Environment_Services, OConv, Logging_Services, SRP_Hashtable, Lot_Services, GetTickCount Declare function Nextkey, Error_Services, Environment_Services, OConv, Logging_Services, SRP_Hashtable, Lot_Services
Declare function SRP_Datetime, Database_Services, Test_Run_Services, File_Services, Status, delete, Insert, Datetime, SRP_Json, MemberOf Declare function SRP_Datetime, Database_Services, Test_Run_Services, File_Services, Status, delete, Insert, Datetime, SRP_Json, MemberOf
Declare subroutine Database_Services, Btree.Extract, Error_Services, Logging_Services, Rlist, Test_Run_Services, Lot_Services, SRP_Json Declare subroutine Database_Services, Btree.Extract, Error_Services, Logging_Services, Rlist, Test_Run_Services, Lot_Services, SRP_Json
Declare subroutine Mona_Services
LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\TEST_RUN_SERVICES\TestWaferProduct' LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\TEST_RUN_SERVICES\TestWaferProduct'
LogDate = Oconv(Date(), 'D4/') LogDate = Oconv(Date(), 'D4/')
@ -31,13 +30,6 @@ objLogTR = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, Comma$, He
LoggingDTM = LogDate : ' ' : LogTime ; // Logging DTM LoggingDTM = LogDate : ' ' : LogTime ; // Logging DTM
IsProd = Environment_Services('IsProd')
If IsProd EQ True$ then
MonaResource = 'GRP_OPENINSIGHT_MES_OP_FE_TESTRUNSERVICES'
end else
MonaResource = 'GRP_OPENINSIGHT_MES_OP_FE_DEV_TESTRUNSERVICES'
end
GoToService GoToService
Return Response or "" Return Response or ""
@ -288,9 +280,6 @@ Service UpdateTWProdSortOrder(TWProdKey, NewOrder)
end service end service
Service GetAllTestRunTypes() Service GetAllTestRunTypes()
StartTick = GetTickCount()
MetricName = 'GetAllTestRunTypes'
keylist = '' keylist = ''
rtList = '' rtList = ''
RList('SELECT TEST_RUN_TYPE BY RUN_TYPE', 5, '', '', '') RList('SELECT TEST_RUN_TYPE BY RUN_TYPE', 5, '', '', '')
@ -308,9 +297,6 @@ Service GetAllTestRunTypes()
end end
Next ProdKey Next ProdKey
Response = rtList Response = rtList
EndTick = GetTickCount()
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
end service end service
Service GetTestWaferLots(ShowOnlyOpenLots) Service GetTestWaferLots(ShowOnlyOpenLots)
@ -332,9 +318,6 @@ Service GetTestWaferLots(ShowOnlyOpenLots)
end service end service
Service CreateTestRunRecord(RunTypeID, EqpType, EqpID, PSNo, RDSNo, UserID, TWLotIds, TWLotQtys) Service CreateTestRunRecord(RunTypeID, EqpType, EqpID, PSNo, RDSNo, UserID, TWLotIds, TWLotQtys)
StartTick = GetTickCount()
MetricName = 'CreateTestRunRecord'
TWRunKey = '' TWRunKey = ''
Response = '' Response = ''
ErrorMessage = '' ErrorMessage = ''
@ -507,15 +490,9 @@ Service CreateTestRunRecord(RunTypeID, EqpType, EqpID, PSNo, RDSNo, UserID, TWLo
Error_Services('Add', ErrorMessage) Error_Services('Add', ErrorMessage)
Response = '' Response = ''
end end
EndTick = GetTickCount()
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
end service end service
Service CreateTestRunWaferRecord(TestRunID, TWPartID, TWUsageTypeID, SourceLotId, Username) Service CreateTestRunWaferRecord(TestRunID, TWPartID, TWUsageTypeID, SourceLotId, Username)
StartTick = GetTickCount()
MetricName = 'CreateTestRunWaferRecord'
ErrorMessage = '' ErrorMessage = ''
If TestRunID NE '' AND TWPartID NE '' then If TestRunID NE '' AND TWPartID NE '' then
If RowExists('TEST_RUN', TestRunID) then If RowExists('TEST_RUN', TestRunID) then
@ -560,9 +537,6 @@ Service CreateTestRunWaferRecord(TestRunID, TWPartID, TWUsageTypeID, SourceLotId
Logging_Services('AppendLog', objLogTR, LogData, @FM, @VM) Logging_Services('AppendLog', objLogTR, LogData, @FM, @VM)
Error_Services('Add', 'Error creating new test run record: ' : ErrorMessage) Error_Services('Add', 'Error creating new test run record: ' : ErrorMessage)
end end
EndTick = GetTickCount()
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
end service end service
Service UseTWFromLot(LotId, UsageQty, Username) Service UseTWFromLot(LotId, UsageQty, Username)
@ -732,9 +706,6 @@ Service GetTestRunKeysByPSN(PSNo)
end service end service
Service GetTestRunKeysByRDS(RDSNo) Service GetTestRunKeysByRDS(RDSNo)
StartTick = GetTickCount()
MetricName = 'GetTestRunKeysByRDS'
table = "TEST_RUN" table = "TEST_RUN"
Open "DICT ":table To @DICT Else Open "DICT ":table To @DICT Else
Error_Services('Add', 'Error opening TEST_RUN dictionary') Error_Services('Add', 'Error opening TEST_RUN dictionary')
@ -747,9 +718,6 @@ Service GetTestRunKeysByRDS(RDSNo)
Btree.Extract(srch_strng, table, @DICT, keylist, option, flag) Btree.Extract(srch_strng, table, @DICT, keylist, option, flag)
Response = keylist Response = keylist
end end
EndTick = GetTickCount()
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
end service end service
Service GetTestRunWaferByID(TRWaferID) Service GetTestRunWaferByID(TRWaferID)
@ -831,4 +799,3 @@ end service

View File

@ -1,309 +0,0 @@
Function Wafercounter_API(@API)
/***********************************************************************************************************************
This program is proprietary and is not to be used by or disclosed to others, nor is it to be copied without written
permission from SRP Computer Solutions, Inc.
Name : Wafercounter_API
Description : API logic for the Wafercounter resource.
Notes : All web APIs should include the API_SETUP insert. This will provide several useful variables:
HTTPMethod - The HTTP Method (Verb) submitted by the client (e.g., GET, POST, etc.)
APIURL - The URL for the API entry point (e.g., api.mysite.com/v1).
FullEndpointURL - The URL submitted by the client, including query params.
FullEndpointURLNoQuery - The URL submitted by the client, excluding query params.
EndpointSegment - The URL endpoint segment.
ParentURL - The URL path preceeding the current endpoint.
CurrentAPI - The name of this stored procedure.
Parameters :
API [in] -- Web API to process. Format is [APIPattern].[HTTPMethod]:
- APIPattern must follow this structure Wafercounter[.ID.[<Property>]]
- HTTPMethod can be any valid HTTP method, e.g., GET, POST, PUT, DELETE, etc.
Examples:
- Wafercounter.POST
- Wafercounter.ID.PUT
- Wafercounter.ID.firstName.GET
Response [out] -- Response to be sent back to the Controller (HTTP_MCP) or requesting procedure. Web API
services do not rely upon anything being returned in the response. This is what the
various services like SetResponseBody and SetResponseStatus services are for. A response
value is only helpful if the developers want to use it for debug purposes.
History : (Date, Initials, Notes)
06/04/25 xxx Original programmer.
***********************************************************************************************************************/
#pragma precomp SRP_PreCompiler
Declare function OI_Wizard_Services, Wafer_Counter_Services, Database_Services, Datetime, Wo_Mat_Services
Declare function Logging_Services, Environment_Services
Declare subroutine Logging_Services
$insert APP_INSERTS
$insert API_SETUP
$insert HTTP_INSERTS
$insert WAFER_COUNTER_EQUATES
LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\API\WaferCounter';
LogDate = Oconv(Date(), 'D4/')
LogTime = Oconv(Time(), 'MTS')
LoggingDTM = LogDate : ' ' : LogTime ; // Logging DTM
LogFileName = LogDate[7, 4] : '-' : LogDate[1, 2] : '-' : LogDate[4, 2] : ' WaferCounter.csv'
Headers = 'Logging DTM' : @FM : 'User' : @FM : 'OI Wizard ID' : @FM : 'Message'
objLog = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, ',', Headers, '', False$, False$)
GoToAPI else
// The specific resource endpoint doesn't have a API handler yet.
LogData = ''
LogData<1> = LoggingDTM;//Defined at entry of subroutine
LogData<2> = ''
LogData<3> = ''
LogData<4> = 'Web API not found.'
Logging_Services('AppendLog', objLog, LogData, @RM, @FM, False$)
HTTP_Services('SetResponseStatus', 204, 'This is a valid endpoint but a web API handler has not yet been created.')
end
Return Response OR ''
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Endpoint Handlers
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
API wafercounter.startnewwafercount.POST
ErrorMessage = ''
ResponseCode = ''
ResponseMessage = ''
Body = ''
OIWizardID = ''
UserId = ''
CassId = ''
Cookies = HTTP_Services('GetHTTPCookie')
For each Cookie in Cookies using ';'
Key = Field(Cookie, '=', 1)
If Key EQ 'sessionID' then
OIWizardID = Field(Cookie, '=', 2)
end
Next Cookie
ValidSession = OI_Wizard_Services('ValidateSession', OIWizardID)
CassBarcodeData = ''
UserId = Xlate('OI_WIZARD', OIWizardID, OI_WIZARD.EMPLOYEE_ID$, 'X')
StatusCode = ''
Body = HTTP_Services('GetHTTPPostString', True$)
DecodedJSON = HTTP_Services('DecodePercentString', Body)
//Log Entry into API -
LogData = ''
LogData<1> = LoggingDTM
LogData<2> = UserId
LogData<3> = OIWizardId
LogData<4> = 'New wafer counter transaction started.'
Logging_Services('AppendLog', objLog, LogData, @RM, @FM, False$)
If SRP_JSON(objBody, 'Parse', Body) EQ '' then
CassBarcodeData = SRP_JSON(objBody, 'GetValue', 'CassBarcodeData')
If CassBarcodeData NE '' then
CassData = Wafer_Counter_Services('ProcessCass2DBarcode', CassBarcodeData)
CassId = CassData<1,1>
ExpectedWfrQty = CassData<1,2>
CassType = CassData<1,3>
WoMatKey = ''
Begin Case
Case CassType EQ 'RDS'
WONo = XLATE('RDS', CassId, 'WO', 'X')
CassNo = XLATE('RDS', CassId, 'CASS_NO', 'X')
WoMatKey = WONo : '*' : CassNo
Case CassType EQ 'WM_OUT' OR CassType EQ 'WM_IN'
swap '.' with '*' in CassId
WONo = Field(CassId, '*', 1)
CassNo = Field(CassId, '*', 3)
WoMatKey = WONo : '*' : CassNo
End Case
ExpectedWfrMap = Wo_Mat_Services('GetWaferMap', WoMatKey)
ExpectedCassetteArray = ''
for i = 25 to 1 step -1
Slot = i
WaferPresent = ExpectedWfrMap<1, i>
ExpectedCassetteArray<-1, 1> = Slot : @VM : WaferPresent
Next i
If Error_Services('NoError') then
SRP_Json(objBody, 'SetValue', 'CassId', CassId, 'String')
SRP_Json(objBody, 'SetValue', 'CassType', CassType, 'String')
SRP_Json(objBody, 'SetValue', 'ExpectedQty', ExpectedWfrQty, 'Number')
SRP_Json(objBody, 'SetValue', 'ScanDtm', OConv(Datetime(), 'DT4/'), 'String')
objExpCassArray = ''
IF SRP_Json(objExpCassArray, 'New', 'Array') then
for each SlotData in ExpectedCassetteArray using @FM setting sPos
Slot = SlotData<1, 1>
WaferPresent = SlotData<1, 2>
objSlot = ''
If SRP_Json(objSlot, 'New', 'Object') then
SRP_Json(objSlot, 'SetValue', 'SlotNo', Slot, 'Number')
SRP_Json(objSlot, 'SetValue', 'WaferPresent', WaferPresent, 'Boolean')
SRP_Json(objExpCassArray, 'Add', objSlot)
SRP_Json(objSlot, 'Release')
end
Next SlotData
SRP_Json(objBody, 'Set', 'ExpectedWaferArray', objExpCassArray)
SRP_Json(objExpCassArray, 'Release')
end
ResponseJson = SRP_Json(objBody, 'Stringify', 'Styled')
HTTP_Services('SetResponseBody', ResponseJson)
ResponseCode = 200
end else
ErrorMessage = Error_Services('GetMessage')
ResponseCode = 500
end
end else
ErrorMessage = 'Cassette ID Barcode data not detected.'
ResponseCode = 500
end
SRP_Json(objBody, 'Release')
end
If ErrorMessage EQ '' then
//Log Success
LogData = ''
LogData<1> = LoggingDTM
LogData<2> = UserId
LogData<3> = OIWizardId
LogData<4> = 'New wafer counter transaction started successfully. Barcode Data: ' : CassBarcodeData : '. Cass Id: ' : CassId
Logging_Services('AppendLog', objLog, LogData, @RM, @FM, False$)
end else
//Log Failure
LogData = ''
LogData<1> = LoggingDTM
LogData<2> = UserId
LogData<3> = OIWizardId
LogData<4> = 'New wafer counter transaction finished with errors. Response Code: ' : ResponseCode : '. Error Message: ' : ErrorMessage : '. Barcode Data: ' : CassBarcodeData : '. Cass Id: ' : CassId
Logging_Services('AppendLog', objLog, LogData, @RM, @FM, False$)
end
HTTP_Services('SetResponseHeaderField', 'Content-Location', FullEndpointURL)
HTTP_Services('SetResponseStatus', ResponseCode, ErrorMessage)
end api
API wafercounter.completewafercount.POST
ErrorMessage = ''
ResponseCode = ''
ResponseMessage = ''
WaferCounterId = ''
CassId = ''
Body = ''
OIWizardID = ''
UserId = ''
Cookies = HTTP_Services('GetHTTPCookie')
For each Cookie in Cookies using ';'
Key = Field(Cookie, '=', 1)
If Key EQ 'sessionID' then
OIWizardID = Field(Cookie, '=', 2)
end
Next Cookie
ValidSession = OI_Wizard_Services('ValidateSession', OIWizardID)
CassBarcodeData = ''
UserId = Xlate('OI_WIZARD', OIWizardID, OI_WIZARD.EMPLOYEE_ID$, 'X')
StatusCode = ''
Body = HTTP_Services('GetHTTPPostString', True$)
DecodedJSON = HTTP_Services('DecodePercentString', Body)
//Log Entry into API -
LogData = ''
LogData<1> = LoggingDTM
LogData<2> = UserId
LogData<3> = OIWizardId
LogData<4> = 'Complete wafer counter transaction started.'
Logging_Services('AppendLog', objLog, LogData, @RM, @FM, False$)
If SRP_JSON(objBody, 'Parse', Body) EQ '' then
CassId = SRP_JSON(objBody, 'GetValue', 'CassId')
CassType = SRP_Json(objBody, 'GetValue', 'CassType')
ToolBarcodeData = SRP_JSON(objBody, 'GetValue', 'ToolBarcodeData')
ExpectedQty = SRP_JSON(objBody, 'GetValue', 'ExpectedQty')
If CassId NE '' then
WaferCounterId = Wafer_Counter_Services('ProcessTool2DBarcode', ToolBarcodeData, CassId, CassType, UserId)
If Error_Services('NoError') then
WaferCounterRec = Database_Services('ReadDataRow', 'WAFER_COUNTER', WaferCounterId, True$, 0, False$)
ScanDtm = OConv(WaferCounterRec<WAFER_COUNTER.SCAN_DTM$>, 'DT4/')
ToolId = WaferCounterRec<WAFER_COUNTER.SCAN_TOOL$>
WaferCount = WaferCounterRec<WAFER_COUNTER.SCAN_QTY$>
MatchingWfrCount = ExpectedQty EQ WaferCount
WaferCountData = WaferCounterRec<WAFER_COUNTER.SCAN_WAFER_MAP$>
swap 1 with 1:@FM in WaferCountData
swap 0 with 0:@FM in WaferCountData
WaferCountData[-1, -1] = ''
CassetteArray = ''
for i = 25 to 1 step -1
Slot = i
WaferPresent = WaferCountData<i>
CassetteArray<-1, 1> = Slot : @VM : WaferPresent
Next i
WaferCountArray = ''
SRP_Json(objBody, 'SetValue', 'WaferCounterId', WaferCounterId, 'String')
SRP_Json(objBody, 'SetValue', 'ScanDtm', ScanDtm, 'String')
SRP_Json(objBody, 'SetValue', 'WaferCount', WaferCount, 'Number')
SRP_Json(objBody, 'SetValue', 'ToolId', ToolId, 'String')
SRP_Json(objBody, 'SetValue', 'MatchingWaferCount', MatchingWfrCount, 'Boolean')
SRP_Json(objBody, 'SetValue', 'WaferCounterId', WaferCounterId, 'String')
objCassArray = ''
IF SRP_Json(objCassArray, 'New', 'Array') then
for each SlotData in CassetteArray using @FM setting sPos
Slot = SlotData<1, 1>
WaferPresent = SlotData<1, 2>
objSlot = ''
If SRP_Json(objSlot, 'New', 'Object') then
SRP_Json(objSlot, 'SetValue', 'SlotNo', Slot, 'Number')
SRP_Json(objSlot, 'SetValue', 'WaferPresent', WaferPresent, 'Boolean')
SRP_Json(objCassArray, 'Add', objSlot)
SRP_Json(objSlot, 'Release')
end
Next SlotData
SRP_Json(objBody, 'Set', 'WaferArray', objCassArray)
SRP_Json(objCassArray, 'Release')
end
ResponseJson = SRP_Json(objBody, 'Stringify', 'Styled')
HTTP_Services('SetResponseBody', ResponseJson)
ResponseCode = 200
end else
ErrorMessage = Error_Services('GetMessage')
ResponseCode = 500
end
end else
ErrorMessage = 'Cassette ID Barcode data not detected.'
ResponseCode = 500
end
SRP_Json(objBody, 'Release')
end
If ErrorMessage EQ '' then
//Log Success
LogData = ''
LogData<1> = LoggingDTM
LogData<2> = UserId
LogData<3> = OIWizardId
LogData<4> = 'Completed wafer counter transaction finished successfully. Barcode Data: ' : CassBarcodeData : '. WAFER_COUNTER Id: ' : WaferCounterId : '. Cass Id: ' : CassId
Logging_Services('AppendLog', objLog, LogData, @RM, @FM, False$)
end else
//Log Failure
LogData = ''
LogData<1> = LoggingDTM
LogData<2> = UserId
LogData<3> = OIWizardId
LogData<4> = 'New wafer counter transaction finished with errors. Response Code: ' : ResponseCode : '. Error Message: ' : ErrorMessage : '. Barcode Data: ' : CassBarcodeData : '. Wafer Counter Id: ' : WaferCounterId : '. Cass Id: ' : CassId
Logging_Services('AppendLog', objLog, LogData, @RM, @FM, False$)
end
HTTP_Services('SetResponseHeaderField', 'Content-Location', FullEndpointURL)
HTTP_Services('SetResponseStatus', ResponseCode, ErrorMessage)
end api

View File

@ -32,8 +32,6 @@ $Insert WO_LOG_EQUATES
$Insert WM_OUT_EQUATES $Insert WM_OUT_EQUATES
$Insert RLIST_EQUATES $Insert RLIST_EQUATES
$Insert WAFER_COUNTER_EQUATES $Insert WAFER_COUNTER_EQUATES
$Insert TOOL_EQUATES
$Insert TOOL_LOG_EQUATES
Equ Tab$ to \09\ Equ Tab$ to \09\
Equ CRLF$ to \0D0A\ Equ CRLF$ to \0D0A\
@ -45,9 +43,8 @@ Equ next_cur$ To 1
Equ add_exist$ to 2 Equ add_exist$ to 2
Declare subroutine Error_Services, Database_Services, Logging_Services, Httpclient_Services, Reduce, SRP_JSON Declare subroutine Error_Services, Database_Services, Logging_Services, Httpclient_Services, Reduce, SRP_JSON
Declare subroutine Wafer_Counter_Services, Lot_Event_Services Declare function Database_Services, Environment_Services, Logging_Services, Httpclient_Services
Declare function Database_Services, Environment_Services, Logging_Services, Httpclient_Services, OConv Declare function RTI_CreateGuid, SRP_JSON
Declare function RTI_CreateGuid, SRP_JSON, WO_Mat_Services, WM_Out_Services, Wafer_Counter_Services, Datetime
LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\WaferCounter' LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\WaferCounter'
LogDate = Oconv(Date(), 'D4/') LogDate = Oconv(Date(), 'D4/')
@ -266,8 +263,6 @@ Service AddScan(LotID, ScanQty, ScanDtm, ScanTool, ScanUser, ScanLocation, Wafer
Record<WAFER_COUNTER.SCAN_WAFER_MAP$> = WaferMap Record<WAFER_COUNTER.SCAN_WAFER_MAP$> = WaferMap
Database_Services('WriteDataRow', 'WAFER_COUNTER', KeyID, Record) Database_Services('WriteDataRow', 'WAFER_COUNTER', KeyID, Record)
Response = KeyId
end service end service
@ -398,161 +393,6 @@ Service GetWaferCounterToolID(WaferSize=WAFER_SIZES, Location=LOCATIONS)
end service end service
//----------------------------------------------------------------------------------------------------------------------
// ProcessCass2DBarcode
//
// Takes in the raw barcode data for a 2D Cassette label. Returns a single field array with 3 field delimited by @VM
// CassId, Expected Qty, and Cass Type
//----------------------------------------------------------------------------------------------------------------------
Service ProcessCass2DBarcode(BarcodeText)
ErrorMessage = ''
ExpectedSlotWaferMap = ''
ExpectedQty = ''
CassId = ''
CassType = ''
If BarcodeText NE '' then
DelimCnt = DCount(BarcodeText, '|')
If DelimCnt EQ 8 then
CassId = Field(BarcodeText, '|', 3)
If CassId NE '' then
If CassId[1, 2] EQ '1T' then
CassId[1, 2] = ''
Begin Case
Case CassId[1, 1] EQ 'O'
CassId[1, 1] = ''
CassType = 'WM_OUT'
Case (CassId[1, 1] EQ 'I')
CassId[1, 1] = ''
CassType = 'WM_IN'
Case Otherwise$
CassType = 'RDS'
End Case
Convert '.' to '*' in CassId
Begin Case
Case RowExists('RDS', CassId)
ExpectedQty = Xlate('RDS', CassId, 'WFRS_OUT', 'X')
Case RowExists('WM_OUT', CassId)
ExpectedQty = Xlate('WM_OUT', CassId, 'WAFER_CNT', 'X')
End Case
end
end else
ErrorMessage = 'Invalid Lot Label Scan. Unable to determine Cass Id'
end
end else
ErrorMessage = 'Invalid Lot Label Scan.'
end
end else
ErrorMessage = 'Scan data was null.'
end
If ErrorMessage EQ '' then
Response = CassId : @VM: ExpectedQty : @VM : CassType
end else
Error_Services('Add', ErrorMessage)
end
end service
//----------------------------------------------------------------------------------------------------------------------
// ProcessTool2DBarcode
//
// Takes in the raw barcode data for a wafer counter label, Cassette Id, Cassette Type, and UserId(Optional)
// Returns a key ID for a completed WAFER_COUNTER record.
//----------------------------------------------------------------------------------------------------------------------
Service ProcessTool2DBarcode(BarcodeText, CassId, CassType, UserId)
ErrorMessage = ''
If BarcodeText NE '' then
DelimCnt = DCount(BarcodeText, '|')
If DelimCnt EQ 2 then
WaferSize = Field(BarcodeText, '|', 1)
Area = Field(BarcodeText, '|', 2)
If Environment_Services('IsProd') then
WcJson = Wafer_Counter_Services('GetWaferCounterJSON', WaferSize, Area, CassID)
end else
WcJson = Wafer_Counter_Services('GetWaferCounterJSONTestData', WaferSize, Area, CassID)
end
If Error_Services('NoError') then
objJSON = ''
If SRP_JSON(objJSON, 'Parse', WcJson) EQ '' then
ScanDtm = SRP_JSON(objJSON, 'GetValue', 'dateTimeFormatted')
ToolID = SRP_JSON(objJSON, 'GetValue', 'equipmentId')
WaferCount = SRP_JSON(objJSON, 'GetValue', 'total')
SlotMap = SRP_JSON(objJSON, 'GetValue', 'slotMap')
SRP_JSON(objJSON, 'Release')
ToolCurrModeKey = Database_Services('ReadDataColumn', 'TOOL', ToolId, TOOL_CURR_MODE_KEY$, True$, 0, False$)
ToolCurrMode = Database_Services('ReadDataColumn', 'TOOL_LOG', ToolCurrModeKey, TOOL_LOG_TOOL_MODE$, True$, 0, False$)
If ToolCurrMode EQ 'PROD' OR ToolCurrMode EQ 'LIM' then
WaferCounterId = Wafer_Counter_Services('AddScan', CassID, WaferCount, ScanDtm, ToolID, UserId, Area, SlotMap)
If Error_Services('NoError') then
Lot_Event_Services('CreateLotEvent', CassId, ScanDtm, 'WAFER_COUNTER', 'Wafer counter data received for lot. ' : WaferCount : ' wafers found.', ToolId, UserId, True$, CassType)
end
end else
ErrorMessage = 'Wafer counter is currently down and cannot be used to log wafer counts.'
end
end else
ErrorMessage = 'Error parsing response from wafer counter.'
end
end else
ErrorMessage = Error_Services('GetMessage')
end
end else
ErrorMessage = 'Invalid tool scan.'
end
end else
ErrorMessage = 'Scan data was null.'
end
If ErrorMessage EQ '' then
Response = WaferCounterId
end else
Error_Services('Add', ErrorMessage)
end
end service
//----------------------------------------------------------------------------------------------------------------------
// GetWaferCounterJSONTestData
//
// Emulates GetWaferCounterJson service.
//----------------------------------------------------------------------------------------------------------------------
Service GetWaferCounterJSONTestData(WaferSize, ToolLocation, CassID)
If ( (WaferSize NE '') and (ToolLocation NE '') and (CassID NE '') ) then
Response = ''
objJson = ''
If SRP_JSON(objJson, 'New', 'Object') then
SRP_JSON(objJson, 'SetValue', 'dateTimeFormatted', Datetime(), 'String')
SRP_JSON(objJson, 'SetValue', 'equipmentId', 'WC8INCH1', 'String')
SRP_JSON(objJson, 'SetValue', 'total', 24, 'Number')
SRP_JSON(objJson, 'SetValue', 'slotMap', '1111111110111111111111111', 'String')
Response = SRP_Json(objJson, 'Stringify', 'Styled')
SRP_JSON(objJSON, 'Release')
end
If Error_Services('NoError') then
StatusCode = 200
If StatusCode NE 200 then
Begin Case
Case Response EQ ''
ErrorMsg = 'Unexpected server error.'
Case Response EQ 'No files!'
ErrorMsg = 'No data. Please re-seat cassette and try again.'
Case Otherwise$
// Use message in response body to populate error services
ErrorMsg = Response
End Case
Error_Services('Add', ErrorMsg)
end
end
end
end service
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Internal GoSubs // Internal GoSubs
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@ -565,4 +405,3 @@ ClearCursors:
return return

View File

@ -1231,23 +1231,19 @@ Service SignVoidNonEpp(WOMatKey, Username)
Service_Services('PostProcedure', 'RDS_SERVICES', 'DetachRDSFromWO':@vm:RDSNo) Service_Services('PostProcedure', 'RDS_SERVICES', 'DetachRDSFromWO':@vm:RDSNo)
If Error_Services('NoError') then If Error_Services('NoError') then
LotEventParams = '' LotEventParams = ''
LotEventParams<1,1> = 'CreateLotEvent' ; //Service Module LotEventParams<1,1> = 'CreateLotEvent'
LotEventParams<1,2> = ''; //Legacy Lot Id, set below LotEventParams<1,4> = DateTime()
LotEventParams<1,3> = DateTime(); //Datetime LotEventParams<1,5> = 'VOID'
LotEventParams<1,4> = 'VOID'; //Event Type LotEventParams<1,6> = 'Lot voided by ' : Username
LotEventParams<1,5> = 'Lot voided by ' : Username; //Event Note LotEventParams<1,11> = Username
LotEventParams<1,6> = ''; //Equipment id
LotEventParams<1,7> = Username ;//User Id
LotEventParams<1,8> = True$; //IsLegacyLotId
LotEventParams<1,9> = ''; //Legacy Lot Type, set below
If RDSNo NE '' then If RDSNo NE '' then
LotEventParams<1,2> = RDSNo LotEventParams<1,2> = RDSNo
LotEventParams<1,9> = 'RDS'; //Legacy Lot Type LotEventParams<1,3> = 'RDS'
Service_Services('PostProcedure', 'LOT_EVENT_SERVICES', LotEventParams) Service_Services('PostProcedure', 'LOT_SERVICES', LotEventParams)
end else end else
LotEventParams<1,2> = WoMatKey LotEventParams<1,2> = WoMatKey
LotEventParams<1,9> = 'WO_MAT' LotEventParams<1,3> = 'WO_MAT'
Service_Services('PostProcedure', 'LOT_EVENT_SERVICES', LotEventParams) Service_Services('PostProcedure', 'LOT_SERVICES', LotEventParams)
end end
If Error_Services('NoError') then If Error_Services('NoError') then
//Add inventory transaction //Add inventory transaction
@ -1315,15 +1311,13 @@ Service SignVoidWMI(WMInKey, Username)
If Error_Services('NoError') then If Error_Services('NoError') then
LotEventParams = '' LotEventParams = ''
LotEventParams<1,1> = 'CreateLotEvent' LotEventParams<1,1> = 'CreateLotEvent'
LotEventParams<1,4> = DateTime()
LotEventParams<1,5> = 'VOID'
LotEventParams<1,6> = 'Lot voided by ' : Username
LotEventParams<1,11> = Username
LotEventParams<1,2> = WMInKey LotEventParams<1,2> = WMInKey
LotEventParams<1,3> = DateTime() LotEventParams<1,3> = 'WM_IN'
LotEventParams<1,4> = 'VOID' Service_Services('PostProcedure', 'LOT_SERVICES', LotEventParams)
LotEventParams<1,5> = 'Lot voided by ' : Username
LotEventParams<1,6> = ''
LotEventParams<1,7> = Username
LotEventParams<1,8> = True$
LotEventParams<1,9> = 'WM_IN'
Service_Services('PostProcedure', 'LOT_EVENT_SERVICES', LotEventParams)
If Error_Services('NoError') then If Error_Services('NoError') then
//Check if WMO is also voided. If it is, remove it from the WO_MAT_KEY field in WO_LOG, and void the WO_MAT record //Check if WMO is also voided. If it is, remove it from the WO_MAT_KEY field in WO_LOG, and void the WO_MAT record
WMOKey = WMInKey; //the paired WMO key is the same as the WMIKey WMOKey = WMInKey; //the paired WMO key is the same as the WMIKey
@ -1392,15 +1386,13 @@ Service SignVoidWMO(WMOutKey, Username)
If Error_Services('NoError') then If Error_Services('NoError') then
LotEventParams = '' LotEventParams = ''
LotEventParams<1,1> = 'CreateLotEvent' LotEventParams<1,1> = 'CreateLotEvent'
LotEventParams<1,4> = DateTime()
LotEventParams<1,5> = 'VOID'
LotEventParams<1,6> = 'Lot voided by ' : Username
LotEventParams<1,11> = Username
LotEventParams<1,2> = WMOutKey LotEventParams<1,2> = WMOutKey
LotEventParams<1,3> = DateTime() LotEventParams<1,3> = 'WM_OUT'
LotEventParams<1,4> = 'VOID' Service_Services('PostProcedure', 'LOT_SERVICES', LotEventParams)
LotEventParams<1,5> = 'Lot voided by ' : Username
LotEventParams<1,6> = ''
LotEventParams<1,7> = Username
LotEventParams<1,8> = True$
LotEventParams<1,9> = 'WM_OUT'
Service_Services('PostProcedure', 'LOT_EVENT_SERVICES', LotEventParams)
If Error_Services('NoError') then If Error_Services('NoError') then
//Check if WMI is also voided. If it is, remove it from the WO_MAT_KEY field in WO_LOG, and void the WO_MAT record //Check if WMI is also voided. If it is, remove it from the WO_MAT_KEY field in WO_LOG, and void the WO_MAT record
WMIKey = WMOutKey; //the paired WMO key is the same as the WMIKey WMIKey = WMOutKey; //the paired WMO key is the same as the WMIKey
@ -1566,4 +1558,3 @@ ClearCursors:
return return

View File

@ -581,8 +581,7 @@ WRITE_RECORD:
If {REACTOR_TYPE} NE 'EPP' then If {REACTOR_TYPE} NE 'EPP' then
If {MAKEUP_BOX} then If {MAKEUP_BOX} then
CurrWaferCount = obj_WO_Mat('CurrWaferCnt', WOMatKeyID) CurrWaferCount = obj_WO_Mat('CurrWaferCnt', WOMatKeyID)
CurrStatus = {CURR_STATUS} If CurrWaferCount GT 0 then
If ( (CurrWaferCount GT 0) and (CurrStatus NE 'VOID') ) then
// Populate MAKEUP_WAFERS table // Populate MAKEUP_WAFERS table
// Add/update cassette data to the MAKEUP_WAFERS table // Add/update cassette data to the MAKEUP_WAFERS table
If RowExists('MAKEUP_WAFERS', WOMatKeyID) then If RowExists('MAKEUP_WAFERS', WOMatKeyID) then
@ -601,7 +600,7 @@ WRITE_RECORD:
MUWfrRec<MAKEUP_WAFERS.PROD_VER_NO$> = {PROD_VER_NO} MUWfrRec<MAKEUP_WAFERS.PROD_VER_NO$> = {PROD_VER_NO}
MUWfrRec<MAKEUP_WAFERS.CUST_PART_NO$> = {CUST_PART_NO} MUWfrRec<MAKEUP_WAFERS.CUST_PART_NO$> = {CUST_PART_NO}
MUWfrRec<MAKEUP_WAFERS.REACT_TYPE$> = {REACTOR_TYPE} MUWfrRec<MAKEUP_WAFERS.REACT_TYPE$> = {REACTOR_TYPE}
MUWfrRec<MAKEUP_WAFERS.CURR_STATUS_STATIC$> = CurrStatus MUWfrRec<MAKEUP_WAFERS.CURR_STATUS_STATIC$> = {CURR_STATUS}
MUWfrRec<MAKEUP_WAFERS.WFR_QTY$> = CurrWaferCount MUWfrRec<MAKEUP_WAFERS.WFR_QTY$> = CurrWaferCount
DateOut = Xlate('RDS', {RDS_NO}, 'DATE_OUT', 'X') DateOut = Xlate('RDS', {RDS_NO}, 'DATE_OUT', 'X')
TimeOut = Xlate('RDS', {RDS_NO}, 'TIME_OUT', 'X') / 86400 TimeOut = Xlate('RDS', {RDS_NO}, 'TIME_OUT', 'X') / 86400

View File

@ -2,9 +2,9 @@ Compile function WO_MAT_Services(@Service, @Params)
#pragma precomp SRP_PreCompiler #pragma precomp SRP_PreCompiler
Declare function Database_Services, Error_Services, SRP_Json, SRP_Com, Environment_Services, Logging_Services Declare function Database_Services, Error_Services, SRP_Json, SRP_Com, Environment_Services, Logging_Services
Declare function Datetime, GetTickCount Declare function Datetime
Declare subroutine Error_Services, SRP_Json, SRP_Com, Wo_Mat_Services, Database_Services, Logging_Services Declare subroutine Error_Services, SRP_Json, SRP_Com, Wo_Mat_Services, Database_Services, Logging_Services
Declare subroutine obj_wo_mat_log, Set_Status, Mona_Services Declare subroutine obj_wo_mat_log, Set_Status
$insert LOGICAL $insert LOGICAL
$Insert APP_INSERTS $Insert APP_INSERTS
@ -20,13 +20,6 @@ Headers = 'Logging DTM' : @FM : 'WOMatKey' : @FM : 'Missing Signature' : @FM :
objSyncLog = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, ',', Headers, '', False$, False$) objSyncLog = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, ',', Headers, '', False$, False$)
LoggingDTM = LogDate : ' ' : LogTime ; // Logging DTM LoggingDTM = LogDate : ' ' : LogTime ; // Logging DTM
IsProd = Environment_Services('IsProd')
If IsProd EQ True$ then
MonaResource = 'GRP_OPENINSIGHT_MES_OP_FE_WOMATSERVICES'
end else
MonaResource = 'GRP_OPENINSIGHT_MES_OP_FE_DEV_WOMATSERVICES'
end
GoToService else GoToService else
Error_Services('Set', Service : ' is not a valid service request within the ' : ServiceModule : ' services module.') Error_Services('Set', Service : ' is not a valid service request within the ' : ServiceModule : ' services module.')
end end
@ -386,9 +379,6 @@ Service SyncWOMatInvActionsAndSigProfile(WOMatKey)
end service end service
Service CassetteIsLastInWo(WoMatKey) Service CassetteIsLastInWo(WoMatKey)
StartTick = GetTickCount()
MetricName = 'CassetteIsLastInWo'
IsLastInWo = False$ IsLastInWo = False$
If Unassigned(WoMatKey) or WoMatKey EQ '' or RowExists('WO_MAT', WoMatKey) NE True$ then If Unassigned(WoMatKey) or WoMatKey EQ '' or RowExists('WO_MAT', WoMatKey) NE True$ then
@ -434,9 +424,6 @@ Service CassetteIsLastInWo(WoMatKey)
end end
Response = IsLastInWo Response = IsLastInWo
EndTick = GetTickCount()
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
end service end service
Service SetWoMatVoidFlag(WoMatKey, Username) Service SetWoMatVoidFlag(WoMatKey, Username)
@ -486,4 +473,3 @@ Service SetWoMatVoidFlag(WoMatKey, Username)
end service end service

View File

@ -1,7 +1,7 @@
compile insert NICA_CHECKLISTS_EQUATES compile insert NICA_CHECKLISTS_EQUATES
/*---------------------------------------- /*----------------------------------------
Author : Table Create Insert Routine Author : Table Create Insert Routine
Written : 03/06/2025 Written : 05/03/2025
Description : Insert for Table NICA_CHECKLISTS Description : Insert for Table NICA_CHECKLISTS
----------------------------------------*/ ----------------------------------------*/
#ifndef __NICA_CHECKLISTS_EQUATES__ #ifndef __NICA_CHECKLISTS_EQUATES__
@ -13,6 +13,6 @@ compile insert NICA_CHECKLISTS_EQUATES
equ NICA_CHECKLISTS.NICA_ORDER_FLOW_TYPE$ to 4 equ NICA_CHECKLISTS.NICA_ORDER_FLOW_TYPE$ to 4
equ NICA_CHECKLISTS.REACTOR_TYPES$ to 5 equ NICA_CHECKLISTS.REACTOR_TYPES$ to 5
equ NICA_CHECKLISTS.REMOVE_IF_COMPLETE$ to 6 equ NICA_CHECKLISTS.REMOVE_IF_COMPLETE$ to 6
equ NICA_CHECKLISTS.REMOVE_IF_INTRUSIVE$ to 7
#endif #endif

View File

@ -1,7 +1,7 @@
compile insert NICA_ORDERS_EQUATES compile insert NICA_ORDERS_EQUATES
/*---------------------------------------- /*----------------------------------------
Author : Table Create Insert Routine Author : Table Create Insert Routine
Written : 28/05/2025 Written : 05/12/2024
Description : Insert for Table NICA_ORDERS Description : Insert for Table NICA_ORDERS
----------------------------------------*/ ----------------------------------------*/
#ifndef __NICA_ORDERS_EQUATES__ #ifndef __NICA_ORDERS_EQUATES__
@ -18,6 +18,7 @@ compile insert NICA_ORDERS_EQUATES
equ NICA_ORDERS.ORDER_RESPONSE_LEVEL$ to 9 equ NICA_ORDERS.ORDER_RESPONSE_LEVEL$ to 9
equ NICA_ORDERS.CREATED_DTM$ to 10 equ NICA_ORDERS.CREATED_DTM$ to 10
equ NICA_ORDERS.CLOSED_DTM$ to 11 equ NICA_ORDERS.CLOSED_DTM$ to 11
equ NICA_ORDERS.INTRUSIVE$ to 12
#endif #endif

View File

@ -12,8 +12,6 @@ compile insert PROC_QUEUE_EQUATES
equ PROC_QUEUE.LAST_ATTEMPT_DTM$ to 3 equ PROC_QUEUE.LAST_ATTEMPT_DTM$ to 3
equ PROC_QUEUE.ERROR$ to 4 equ PROC_QUEUE.ERROR$ to 4
equ PROC_QUEUE.ENTRY_DTM$ to 5 equ PROC_QUEUE.ENTRY_DTM$ to 5
equ PROC_QUEUE.NUM_ATTEMPTS$ to 6
#endif #endif

View File

@ -1,17 +0,0 @@
compile insert PROC_QUEUE_FAILED_EQUATES
/*----------------------------------------
Author : Table Create Insert Routine
Written : 06/06/2025
Description : Insert for Table PROC_QUEUE_FAILED
----------------------------------------*/
#ifndef __PROC_QUEUE_FAILED_EQUATES__
#define __PROC_QUEUE_FAILED_EQUATES__
equ PROC_QUEUE_FAILED.PROC_NAME$ to 1
equ PROC_QUEUE_FAILED.PARAMS$ to 2
equ PROC_QUEUE_FAILED.COMP_DTM$ to 3
equ PROC_QUEUE_FAILED.ERROR$ to 4
equ PROC_QUEUE_FAILED.ENTRY_DTM$ to 5
equ PROC_QUEUE_FAILED.NUM_ATTEMPTS$ to 6
#endif

View File

@ -83,5 +83,4 @@ Equ REACTOR_HGCV_CHECKLIST_ACTIVE$ To 71
Equ REACTOR_INTRUSIVE_MAINT_CHECKLIST_ACTIVE$ To 72 Equ REACTOR_INTRUSIVE_MAINT_CHECKLIST_ACTIVE$ To 72
Equ REACTOR_ABORT_ALARM_CHECKLIST_ACTIVE$ To 73 Equ REACTOR_ABORT_ALARM_CHECKLIST_ACTIVE$ To 73
Equ REACTOR_ABORT_ALARM_COMPLETE$ To 74 Equ REACTOR_ABORT_ALARM_COMPLETE$ To 74
Equ REACTOR_EXHAUST_CHAMBER_THK$ To 75