Compare commits
32 Commits
292bc4646b
...
06-16-a
Author | SHA1 | Date | |
---|---|---|---|
f48e277369 | |||
2d3f534a71 | |||
f6ba173f47 | |||
98e02f8c40 | |||
de6296b1d3 | |||
ebd8b36d13 | |||
803f946c7e | |||
16c7bc6926 | |||
216df9b4ef | |||
5eec9386c2 | |||
f3ad7adfa8 | |||
c4fbf7c1d9 | |||
2a28c4b743 | |||
e5f0e9b7f1 | |||
869787e0f3 | |||
38fc89dac6 | |||
614da8ad3b | |||
dcb61e220c | |||
117e5c8b4b | |||
25c608c9a6 | |||
31632e28aa | |||
03b0c8f606 | |||
6cfb6e521e | |||
481f083804 | |||
18919090d8 | |||
550f376a0b | |||
6aad8036e5 | |||
4fc7eb189b | |||
5e917e65ac | |||
97f3c3fce2 | |||
27d55d83a1 | |||
4e213ff253 |
1
.gitignore
vendored
1
.gitignore
vendored
@ -1,3 +1,4 @@
|
||||
LSL2/STPROC/TEST_DANIEL*.txt
|
||||
LSL2/STPROC/TEST_DAKOTA.txt
|
||||
LSL2/STPROC/JONATHAN_SERVICES.txt
|
||||
.vscode/**/*.png
|
234
.vscode/.txt
vendored
Normal file
234
.vscode/.txt
vendored
Normal 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
280
.vscode/.vba
vendored
Normal 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
|
50
.vscode/638810565835457504/1745485161 SP101 666335 2025-04-24 01-56-23.txt
vendored
Normal file
50
.vscode/638810565835457504/1745485161 SP101 666335 2025-04-24 01-56-23.txt
vendored
Normal 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
|
1982
.vscode/638810565835457504/SP101_250424015623000.json
vendored
Normal file
1982
.vscode/638810565835457504/SP101_250424015623000.json
vendored
Normal file
File diff suppressed because it is too large
Load Diff
87
.vscode/638810565835457504/SP101_250424015623000.pdsf
vendored
Normal file
87
.vscode/638810565835457504/SP101_250424015623000.pdsf
vendored
Normal 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
|
49
.vscode/638811099895374259/1745538421 TENCOR1 667227 2025-04-24 16-46-29.txt
vendored
Normal file
49
.vscode/638811099895374259/1745538421 TENCOR1 667227 2025-04-24 16-46-29.txt
vendored
Normal 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
|
176
.vscode/638811099895374259/TENCOR1_250424164629000.json
vendored
Normal file
176
.vscode/638811099895374259/TENCOR1_250424164629000.json
vendored
Normal 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
|
||||
}
|
||||
]
|
||||
}
|
43
.vscode/638811099895374259/TENCOR1_250424164629000.pdsf
vendored
Normal file
43
.vscode/638811099895374259/TENCOR1_250424164629000.pdsf
vendored
Normal 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
|
78
.vscode/638811116720000000/1745540084 CDE5 666765 2025-04-24 17-14-32.txt
vendored
Normal file
78
.vscode/638811116720000000/1745540084 CDE5 666765 2025-04-24 17-14-32.txt
vendored
Normal 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
|
122
.vscode/638811116720000000/CDE5_250424171432000.json
vendored
Normal file
122
.vscode/638811116720000000/CDE5_250424171432000.json
vendored
Normal 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"
|
||||
}
|
||||
]
|
||||
}
|
57
.vscode/638811116720000000/CDE5_250424171432000.pdsf
vendored
Normal file
57
.vscode/638811116720000000/CDE5_250424171432000.pdsf
vendored
Normal 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
|
36
.vscode/638811150679527382/1745543491 BIORAD2 667740 2025-04-24 18-11-07.txt
vendored
Normal file
36
.vscode/638811150679527382/1745543491 BIORAD2 667740 2025-04-24 18-11-07.txt
vendored
Normal 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
|
80
.vscode/638811150679527382/BIORAD2_250424181107000.json
vendored
Normal file
80
.vscode/638811150679527382/BIORAD2_250424181107000.json
vendored
Normal 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"
|
||||
}
|
||||
]
|
||||
}
|
55
.vscode/638811150679527382/BIORAD2_250424181107000.pdsf
vendored
Normal file
55
.vscode/638811150679527382/BIORAD2_250424181107000.pdsf
vendored
Normal 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
|
22
.vscode/638811206483711430/1745549064 BIORAD5 667283 2025-04-24 19-44-08.txt
vendored
Normal file
22
.vscode/638811206483711430/1745549064 BIORAD5 667283 2025-04-24 19-44-08.txt
vendored
Normal 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
|
59
.vscode/638811206483711430/BIORAD5_250424194408000.json
vendored
Normal file
59
.vscode/638811206483711430/BIORAD5_250424194408000.json
vendored
Normal 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"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
41
.vscode/638811206483711430/BIORAD5_250424194408000.pdsf
vendored
Normal file
41
.vscode/638811206483711430/BIORAD5_250424194408000.pdsf
vendored
Normal 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
|
103
.vscode/638811672019538124/1745595622 HGCV2 667776 2025-04-25 08-40-01.txt
vendored
Normal file
103
.vscode/638811672019538124/1745595622 HGCV2 667776 2025-04-25 08-40-01.txt
vendored
Normal 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
|
119
.vscode/638811672019538124/HGCV2_250425084001000.json
vendored
Normal file
119
.vscode/638811672019538124/HGCV2_250425084001000.json
vendored
Normal 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"
|
||||
}
|
||||
]
|
||||
}
|
47
.vscode/638811672019538124/HGCV2_250425084001000.pdsf
vendored
Normal file
47
.vscode/638811672019538124/HGCV2_250425084001000.pdsf
vendored
Normal 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
|
3337
.vscode/METROLOGY_SERVICES.vba
vendored
Normal file
3337
.vscode/METROLOGY_SERVICES.vba
vendored
Normal file
File diff suppressed because it is too large
Load Diff
6
.vscode/settings.json
vendored
Normal file
6
.vscode/settings.json
vendored
Normal file
@ -0,0 +1,6 @@
|
||||
{
|
||||
"files.associations": {
|
||||
"*.txt": "vba"
|
||||
},
|
||||
"cSpell.words": []
|
||||
}
|
File diff suppressed because it is too large
Load Diff
675
LSL2/OIWIN/NDW_ACKNOWLEDGE_MESSAGE.json
Normal file
675
LSL2/OIWIN/NDW_ACKNOWLEDGE_MESSAGE.json
Normal file
@ -0,0 +1,675 @@
|
||||
{
|
||||
"header": {
|
||||
"version": 1,
|
||||
"type": "record"
|
||||
},
|
||||
"body": {
|
||||
"record1": {
|
||||
"<1>": "1010",
|
||||
"<2>": "3",
|
||||
"<3>": ""
|
||||
},
|
||||
"record2": {
|
||||
"<1>": {
|
||||
"<1,1>": "NDW_ACKNOWLEDGE_MESSAGE",
|
||||
"<1,2>": "",
|
||||
"<1,3>": "WINDOW",
|
||||
"<1,4>": "",
|
||||
"<1,5>": "137",
|
||||
"<1,6>": "173",
|
||||
"<1,7>": "-765",
|
||||
"<1,8>": "-539",
|
||||
"<1,9>": "Process Message",
|
||||
"<1,10>": {
|
||||
"<1,10,1>": "0x84C80000",
|
||||
"<1,10,2>": "0x101"
|
||||
},
|
||||
"<1,11>": {
|
||||
"<1,11,1>": "0x8000",
|
||||
"<1,11,2>": "0x80000000"
|
||||
},
|
||||
"<1,12>": "",
|
||||
"<1,13>": {
|
||||
"<1,13,1>": "-2",
|
||||
"<1,13,2>": "-2",
|
||||
"<1,13,3>": "0"
|
||||
},
|
||||
"<1,14>": "",
|
||||
"<1,15>": "",
|
||||
"<1,16>": "",
|
||||
"<1,17>": "",
|
||||
"<1,18>": {
|
||||
"<1,18,1>": {
|
||||
"<1,18,1,1>": "X",
|
||||
"<1,18,1,2>": "EXECUTE",
|
||||
"<1,18,1,3>": "@WINDOW_EVENTS",
|
||||
"<1,18,1,4>": {
|
||||
"<1,18,1,4,1>": "@SELF",
|
||||
"<1,18,1,4,2>": "@EVENT",
|
||||
"<1,18,1,4,3>": "@PARAM1",
|
||||
"<1,18,1,4,4>": "@PARAM2",
|
||||
"<1,18,1,4,5>": "@PARAM3",
|
||||
"<1,18,1,4,6>": "@PARAM4",
|
||||
"<1,18,1,4,7>": "@PARAM5",
|
||||
"<1,18,1,4,8>": "@PARAM6"
|
||||
},
|
||||
"<1,18,1,5>": "",
|
||||
"<1,18,1,6>": "",
|
||||
"<1,18,1,7>": "",
|
||||
"<1,18,1,8>": "",
|
||||
"<1,18,1,9>": "",
|
||||
"<1,18,1,10>": "",
|
||||
"<1,18,1,11>": "",
|
||||
"<1,18,1,12>": "",
|
||||
"<1,18,1,13>": "",
|
||||
"<1,18,1,14>": "",
|
||||
"<1,18,1,15>": "COMMEVT",
|
||||
"<1,18,1,16>": "0"
|
||||
}
|
||||
},
|
||||
"<1,19>": "CREATE",
|
||||
"<1,20>": "",
|
||||
"<1,21>": "",
|
||||
"<1,22>": "",
|
||||
"<1,23>": "",
|
||||
"<1,24>": {
|
||||
"<1,24,1>": "",
|
||||
"<1,24,2>": "0",
|
||||
"<1,24,3>": "0",
|
||||
"<1,24,4>": "0",
|
||||
"<1,24,5>": "",
|
||||
"<1,24,6>": "0",
|
||||
"<1,24,7>": "",
|
||||
"<1,24,8>": "",
|
||||
"<1,24,9>": "",
|
||||
"<1,24,10>": "0",
|
||||
"<1,24,11>": "0",
|
||||
"<1,24,12>": "0",
|
||||
"<1,24,13>": "0",
|
||||
"<1,24,14>": "0",
|
||||
"<1,24,15>": "0",
|
||||
"<1,24,16>": "0",
|
||||
"<1,24,17>": "0"
|
||||
},
|
||||
"<1,25>": "",
|
||||
"<1,26>": "",
|
||||
"<1,27>": "",
|
||||
"<1,28>": "",
|
||||
"<1,29>": "",
|
||||
"<1,30>": "",
|
||||
"<1,31>": "",
|
||||
"<1,32>": "",
|
||||
"<1,33>": "",
|
||||
"<1,34>": "LSL2*IMAGE*ICO*INFINEON",
|
||||
"<1,35>": "",
|
||||
"<1,36>": "",
|
||||
"<1,37>": {
|
||||
"<1,37,1>": "0X10001",
|
||||
"<1,37,2>": "0X10001"
|
||||
},
|
||||
"<1,38>": "",
|
||||
"<1,39>": "",
|
||||
"<1,40>": "",
|
||||
"<1,41>": "",
|
||||
"<1,42>": "",
|
||||
"<1,43>": "",
|
||||
"<1,44>": "",
|
||||
"<1,45>": "",
|
||||
"<1,46>": "",
|
||||
"<1,47>": "",
|
||||
"<1,48>": "",
|
||||
"<1,49>": "",
|
||||
"<1,50>": "",
|
||||
"<1,51>": "",
|
||||
"<1,52>": "",
|
||||
"<1,53>": "",
|
||||
"<1,54>": "",
|
||||
"<1,55>": "",
|
||||
"<1,56>": "",
|
||||
"<1,57>": "",
|
||||
"<1,58>": "",
|
||||
"<1,59>": "",
|
||||
"<1,60>": "",
|
||||
"<1,61>": "",
|
||||
"<1,62>": {
|
||||
"<1,62,1>": "0",
|
||||
"<1,62,2>": "",
|
||||
"<1,62,3>": "",
|
||||
"<1,62,4>": "2",
|
||||
"<1,62,5>": "0",
|
||||
"<1,62,6>": "0",
|
||||
"<1,62,7>": "",
|
||||
"<1,62,8>": "0.50",
|
||||
"<1,62,9>": "5.00",
|
||||
"<1,62,10>": "0.00"
|
||||
},
|
||||
"<1,63>": "",
|
||||
"<1,64>": "",
|
||||
"<1,65>": "",
|
||||
"<1,66>": "",
|
||||
"<1,67>": "",
|
||||
"<1,68>": "",
|
||||
"<1,69>": "",
|
||||
"<1,70>": "",
|
||||
"<1,71>": "",
|
||||
"<1,72>": "",
|
||||
"<1,73>": "",
|
||||
"<1,74>": "",
|
||||
"<1,75>": "",
|
||||
"<1,76>": "",
|
||||
"<1,77>": "",
|
||||
"<1,78>": "",
|
||||
"<1,79>": "",
|
||||
"<1,80>": "",
|
||||
"<1,81>": "",
|
||||
"<1,82>": "",
|
||||
"<1,83>": "",
|
||||
"<1,84>": "",
|
||||
"<1,85>": "",
|
||||
"<1,86>": "",
|
||||
"<1,87>": "",
|
||||
"<1,88>": "",
|
||||
"<1,89>": "",
|
||||
"<1,90>": "",
|
||||
"<1,91>": "",
|
||||
"<1,92>": "",
|
||||
"<1,93>": "",
|
||||
"<1,94>": "",
|
||||
"<1,95>": "",
|
||||
"<1,96>": "",
|
||||
"<1,97>": "",
|
||||
"<1,98>": "",
|
||||
"<1,99>": "",
|
||||
"<1,100>": "",
|
||||
"<1,101>": "",
|
||||
"<1,102>": "",
|
||||
"<1,103>": "",
|
||||
"<1,104>": "",
|
||||
"<1,105>": "",
|
||||
"<1,106>": "0",
|
||||
"<1,107>": "",
|
||||
"<1,108>": ""
|
||||
}
|
||||
},
|
||||
"record3": {
|
||||
"<1>": {
|
||||
"<1,1>": "EDB_DATA",
|
||||
"<1,2>": "",
|
||||
"<1,3>": "EDITBOX",
|
||||
"<1,4>": "NDW_ACKNOWLEDGE_MESSAGE",
|
||||
"<1,5>": "16",
|
||||
"<1,6>": "12",
|
||||
"<1,7>": "-17",
|
||||
"<1,8>": "-48",
|
||||
"<1,9>": "",
|
||||
"<1,10>": {
|
||||
"<1,10,1>": "0x56200840",
|
||||
"<1,10,2>": "0x200"
|
||||
},
|
||||
"<1,11>": {
|
||||
"<1,11,1>": "0xC400",
|
||||
"<1,11,2>": "0x80000000"
|
||||
},
|
||||
"<1,12>": "3",
|
||||
"<1,13>": {
|
||||
"<1,13,1>": "-2",
|
||||
"<1,13,2>": "-2",
|
||||
"<1,13,3>": ""
|
||||
},
|
||||
"<1,14>": "-2",
|
||||
"<1,15>": {
|
||||
"<1,15,1>": {
|
||||
"<1,15,1,1>": "Segoe UI",
|
||||
"<1,15,1,2>": "-15",
|
||||
"<1,15,1,3>": "400",
|
||||
"<1,15,1,4>": "0",
|
||||
"<1,15,1,5>": "0",
|
||||
"<1,15,1,6>": "0",
|
||||
"<1,15,1,7>": "0",
|
||||
"<1,15,1,8>": "34",
|
||||
"<1,15,1,9>": "0",
|
||||
"<1,15,1,10>": "3",
|
||||
"<1,15,1,11>": "2",
|
||||
"<1,15,1,12>": "1"
|
||||
}
|
||||
},
|
||||
"<1,16>": "",
|
||||
"<1,17>": "",
|
||||
"<1,18>": "",
|
||||
"<1,19>": "",
|
||||
"<1,20>": "",
|
||||
"<1,21>": "",
|
||||
"<1,22>": "",
|
||||
"<1,23>": "",
|
||||
"<1,24>": "",
|
||||
"<1,25>": "",
|
||||
"<1,26>": "",
|
||||
"<1,27>": "",
|
||||
"<1,28>": "<<None>>",
|
||||
"<1,29>": "<<None>>",
|
||||
"<1,30>": "",
|
||||
"<1,31>": "0",
|
||||
"<1,32>": "",
|
||||
"<1,33>": "",
|
||||
"<1,34>": "",
|
||||
"<1,35>": "",
|
||||
"<1,36>": "",
|
||||
"<1,37>": "",
|
||||
"<1,38>": "",
|
||||
"<1,39>": "",
|
||||
"<1,40>": "",
|
||||
"<1,41>": "",
|
||||
"<1,42>": "",
|
||||
"<1,43>": "",
|
||||
"<1,44>": "",
|
||||
"<1,45>": "",
|
||||
"<1,46>": "",
|
||||
"<1,47>": "",
|
||||
"<1,48>": "",
|
||||
"<1,49>": "",
|
||||
"<1,50>": "",
|
||||
"<1,51>": "",
|
||||
"<1,52>": "",
|
||||
"<1,53>": "",
|
||||
"<1,54>": "",
|
||||
"<1,55>": "",
|
||||
"<1,56>": "",
|
||||
"<1,57>": "",
|
||||
"<1,58>": "",
|
||||
"<1,59>": "",
|
||||
"<1,60>": "",
|
||||
"<1,61>": "",
|
||||
"<1,62>": "0",
|
||||
"<1,63>": "",
|
||||
"<1,64>": "",
|
||||
"<1,65>": "",
|
||||
"<1,66>": "",
|
||||
"<1,67>": "",
|
||||
"<1,68>": "",
|
||||
"<1,69>": "",
|
||||
"<1,70>": "",
|
||||
"<1,71>": "",
|
||||
"<1,72>": "",
|
||||
"<1,73>": "",
|
||||
"<1,74>": "",
|
||||
"<1,75>": "",
|
||||
"<1,76>": "",
|
||||
"<1,77>": "",
|
||||
"<1,78>": "",
|
||||
"<1,79>": "",
|
||||
"<1,80>": "",
|
||||
"<1,81>": "",
|
||||
"<1,82>": "",
|
||||
"<1,83>": "",
|
||||
"<1,84>": "",
|
||||
"<1,85>": "",
|
||||
"<1,86>": "",
|
||||
"<1,87>": "",
|
||||
"<1,88>": "",
|
||||
"<1,89>": "",
|
||||
"<1,90>": "",
|
||||
"<1,91>": "",
|
||||
"<1,92>": "",
|
||||
"<1,93>": "",
|
||||
"<1,94>": "",
|
||||
"<1,95>": "",
|
||||
"<1,96>": "",
|
||||
"<1,97>": "",
|
||||
"<1,98>": "",
|
||||
"<1,99>": "",
|
||||
"<1,100>": "",
|
||||
"<1,101>": "",
|
||||
"<1,102>": "",
|
||||
"<1,103>": "",
|
||||
"<1,104>": "",
|
||||
"<1,105>": "",
|
||||
"<1,106>": "",
|
||||
"<1,107>": "",
|
||||
"<1,108>": ""
|
||||
},
|
||||
"<2>": {
|
||||
"<2,1>": "PUB_OK",
|
||||
"<2,2>": "",
|
||||
"<2,3>": "PUSHBUTTON",
|
||||
"<2,4>": "NDW_ACKNOWLEDGE_MESSAGE",
|
||||
"<2,5>": "-184",
|
||||
"<2,6>": "-37",
|
||||
"<2,7>": "80",
|
||||
"<2,8>": "24",
|
||||
"<2,9>": "&OK",
|
||||
"<2,10>": {
|
||||
"<2,10,1>": "0x56000300",
|
||||
"<2,10,2>": "0x0"
|
||||
},
|
||||
"<2,11>": {
|
||||
"<2,11,1>": "0x3005",
|
||||
"<2,11,2>": "0x80000000"
|
||||
},
|
||||
"<2,12>": "1",
|
||||
"<2,13>": {
|
||||
"<2,13,1>": "-2",
|
||||
"<2,13,2>": "-2",
|
||||
"<2,13,3>": "0"
|
||||
},
|
||||
"<2,14>": "-2",
|
||||
"<2,15>": {
|
||||
"<2,15,1>": {
|
||||
"<2,15,1,1>": "Segoe UI",
|
||||
"<2,15,1,2>": "-12",
|
||||
"<2,15,1,3>": "400",
|
||||
"<2,15,1,4>": "0",
|
||||
"<2,15,1,5>": "0",
|
||||
"<2,15,1,6>": "0",
|
||||
"<2,15,1,7>": "1",
|
||||
"<2,15,1,8>": "0",
|
||||
"<2,15,1,9>": "0",
|
||||
"<2,15,1,10>": "0",
|
||||
"<2,15,1,11>": "0",
|
||||
"<2,15,1,12>": "0"
|
||||
}
|
||||
},
|
||||
"<2,16>": "",
|
||||
"<2,17>": "",
|
||||
"<2,18>": {
|
||||
"<2,18,1>": {
|
||||
"<2,18,1,1>": "X",
|
||||
"<2,18,1,2>": "EXECUTE",
|
||||
"<2,18,1,3>": "@WINDOW_EVENTS",
|
||||
"<2,18,1,4>": {
|
||||
"<2,18,1,4,1>": "@SELF",
|
||||
"<2,18,1,4,2>": "@EVENT",
|
||||
"<2,18,1,4,3>": "@PARAM1",
|
||||
"<2,18,1,4,4>": "@PARAM2",
|
||||
"<2,18,1,4,5>": "@PARAM3",
|
||||
"<2,18,1,4,6>": "@PARAM4",
|
||||
"<2,18,1,4,7>": "@PARAM5",
|
||||
"<2,18,1,4,8>": "@PARAM6"
|
||||
},
|
||||
"<2,18,1,5>": "",
|
||||
"<2,18,1,6>": "",
|
||||
"<2,18,1,7>": "",
|
||||
"<2,18,1,8>": "",
|
||||
"<2,18,1,9>": "",
|
||||
"<2,18,1,10>": "",
|
||||
"<2,18,1,11>": "",
|
||||
"<2,18,1,12>": "",
|
||||
"<2,18,1,13>": "",
|
||||
"<2,18,1,14>": "",
|
||||
"<2,18,1,15>": "COMMEVT",
|
||||
"<2,18,1,16>": "0"
|
||||
}
|
||||
},
|
||||
"<2,19>": "CLICK",
|
||||
"<2,20>": "",
|
||||
"<2,21>": "",
|
||||
"<2,22>": "",
|
||||
"<2,23>": "",
|
||||
"<2,24>": "",
|
||||
"<2,25>": "",
|
||||
"<2,26>": "",
|
||||
"<2,27>": "",
|
||||
"<2,28>": "",
|
||||
"<2,29>": "",
|
||||
"<2,30>": "",
|
||||
"<2,31>": "",
|
||||
"<2,32>": "",
|
||||
"<2,33>": "",
|
||||
"<2,34>": "",
|
||||
"<2,35>": "",
|
||||
"<2,36>": "",
|
||||
"<2,37>": "",
|
||||
"<2,38>": "",
|
||||
"<2,39>": "",
|
||||
"<2,40>": "-1",
|
||||
"<2,41>": {
|
||||
"<2,41,1>": "",
|
||||
"<2,41,2>": "-1"
|
||||
},
|
||||
"<2,42>": "",
|
||||
"<2,43>": "",
|
||||
"<2,44>": "",
|
||||
"<2,45>": "",
|
||||
"<2,46>": "",
|
||||
"<2,47>": "",
|
||||
"<2,48>": "",
|
||||
"<2,49>": "",
|
||||
"<2,50>": "",
|
||||
"<2,51>": "",
|
||||
"<2,52>": "",
|
||||
"<2,53>": "",
|
||||
"<2,54>": "",
|
||||
"<2,55>": "",
|
||||
"<2,56>": "",
|
||||
"<2,57>": "",
|
||||
"<2,58>": "",
|
||||
"<2,59>": "",
|
||||
"<2,60>": "",
|
||||
"<2,61>": "",
|
||||
"<2,62>": "0",
|
||||
"<2,63>": "",
|
||||
"<2,64>": {
|
||||
"<2,64,1>": "-2",
|
||||
"<2,64,2>": "-2",
|
||||
"<2,64,3>": "0"
|
||||
},
|
||||
"<2,65>": "-2",
|
||||
"<2,66>": "",
|
||||
"<2,67>": "",
|
||||
"<2,68>": "",
|
||||
"<2,69>": "",
|
||||
"<2,70>": "",
|
||||
"<2,71>": "",
|
||||
"<2,72>": "",
|
||||
"<2,73>": "",
|
||||
"<2,74>": "",
|
||||
"<2,75>": "",
|
||||
"<2,76>": "",
|
||||
"<2,77>": "",
|
||||
"<2,78>": "",
|
||||
"<2,79>": "",
|
||||
"<2,80>": "",
|
||||
"<2,81>": "",
|
||||
"<2,82>": "",
|
||||
"<2,83>": "",
|
||||
"<2,84>": "",
|
||||
"<2,85>": "",
|
||||
"<2,86>": "",
|
||||
"<2,87>": "",
|
||||
"<2,88>": "",
|
||||
"<2,89>": "",
|
||||
"<2,90>": "0",
|
||||
"<2,91>": "0",
|
||||
"<2,92>": "",
|
||||
"<2,93>": "",
|
||||
"<2,94>": "",
|
||||
"<2,95>": "",
|
||||
"<2,96>": "",
|
||||
"<2,97>": "",
|
||||
"<2,98>": "",
|
||||
"<2,99>": "",
|
||||
"<2,100>": "",
|
||||
"<2,101>": "",
|
||||
"<2,102>": "",
|
||||
"<2,103>": "",
|
||||
"<2,104>": "",
|
||||
"<2,105>": "",
|
||||
"<2,106>": "",
|
||||
"<2,107>": "",
|
||||
"<2,108>": ""
|
||||
},
|
||||
"<3>": {
|
||||
"<3,1>": "PUB_CANCEL",
|
||||
"<3,2>": "",
|
||||
"<3,3>": "PUSHBUTTON",
|
||||
"<3,4>": "NDW_ACKNOWLEDGE_MESSAGE",
|
||||
"<3,5>": "-97",
|
||||
"<3,6>": "-37",
|
||||
"<3,7>": "80",
|
||||
"<3,8>": "24",
|
||||
"<3,9>": "&Cancel",
|
||||
"<3,10>": {
|
||||
"<3,10,1>": "0x56000300",
|
||||
"<3,10,2>": "0x0"
|
||||
},
|
||||
"<3,11>": {
|
||||
"<3,11,1>": "0x3002",
|
||||
"<3,11,2>": "0x80000000"
|
||||
},
|
||||
"<3,12>": "2",
|
||||
"<3,13>": {
|
||||
"<3,13,1>": "-2",
|
||||
"<3,13,2>": "-2",
|
||||
"<3,13,3>": "0"
|
||||
},
|
||||
"<3,14>": "-2",
|
||||
"<3,15>": {
|
||||
"<3,15,1>": {
|
||||
"<3,15,1,1>": "Segoe UI",
|
||||
"<3,15,1,2>": "-12",
|
||||
"<3,15,1,3>": "400",
|
||||
"<3,15,1,4>": "0",
|
||||
"<3,15,1,5>": "0",
|
||||
"<3,15,1,6>": "0",
|
||||
"<3,15,1,7>": "1",
|
||||
"<3,15,1,8>": "0",
|
||||
"<3,15,1,9>": "0",
|
||||
"<3,15,1,10>": "0",
|
||||
"<3,15,1,11>": "0",
|
||||
"<3,15,1,12>": "0"
|
||||
}
|
||||
},
|
||||
"<3,16>": "",
|
||||
"<3,17>": "",
|
||||
"<3,18>": {
|
||||
"<3,18,1>": {
|
||||
"<3,18,1,1>": "X",
|
||||
"<3,18,1,2>": "EXECUTE",
|
||||
"<3,18,1,3>": "@WINDOW_EVENTS",
|
||||
"<3,18,1,4>": {
|
||||
"<3,18,1,4,1>": "@SELF",
|
||||
"<3,18,1,4,2>": "@EVENT",
|
||||
"<3,18,1,4,3>": "@PARAM1",
|
||||
"<3,18,1,4,4>": "@PARAM2",
|
||||
"<3,18,1,4,5>": "@PARAM3",
|
||||
"<3,18,1,4,6>": "@PARAM4",
|
||||
"<3,18,1,4,7>": "@PARAM5",
|
||||
"<3,18,1,4,8>": "@PARAM6"
|
||||
},
|
||||
"<3,18,1,5>": "",
|
||||
"<3,18,1,6>": "",
|
||||
"<3,18,1,7>": "",
|
||||
"<3,18,1,8>": "",
|
||||
"<3,18,1,9>": "",
|
||||
"<3,18,1,10>": "",
|
||||
"<3,18,1,11>": "",
|
||||
"<3,18,1,12>": "",
|
||||
"<3,18,1,13>": "",
|
||||
"<3,18,1,14>": "",
|
||||
"<3,18,1,15>": "COMMEVT",
|
||||
"<3,18,1,16>": "0"
|
||||
}
|
||||
},
|
||||
"<3,19>": "CLICK",
|
||||
"<3,20>": "",
|
||||
"<3,21>": "",
|
||||
"<3,22>": "",
|
||||
"<3,23>": "",
|
||||
"<3,24>": "",
|
||||
"<3,25>": "",
|
||||
"<3,26>": "",
|
||||
"<3,27>": "",
|
||||
"<3,28>": "",
|
||||
"<3,29>": "",
|
||||
"<3,30>": "",
|
||||
"<3,31>": "",
|
||||
"<3,32>": "",
|
||||
"<3,33>": "",
|
||||
"<3,34>": "",
|
||||
"<3,35>": "",
|
||||
"<3,36>": "",
|
||||
"<3,37>": "",
|
||||
"<3,38>": "",
|
||||
"<3,39>": "",
|
||||
"<3,40>": "-1",
|
||||
"<3,41>": {
|
||||
"<3,41,1>": "",
|
||||
"<3,41,2>": "-1"
|
||||
},
|
||||
"<3,42>": "",
|
||||
"<3,43>": "",
|
||||
"<3,44>": "",
|
||||
"<3,45>": "",
|
||||
"<3,46>": "",
|
||||
"<3,47>": "",
|
||||
"<3,48>": "",
|
||||
"<3,49>": "",
|
||||
"<3,50>": "",
|
||||
"<3,51>": "",
|
||||
"<3,52>": "",
|
||||
"<3,53>": "",
|
||||
"<3,54>": "",
|
||||
"<3,55>": "",
|
||||
"<3,56>": "",
|
||||
"<3,57>": "",
|
||||
"<3,58>": "",
|
||||
"<3,59>": "",
|
||||
"<3,60>": "",
|
||||
"<3,61>": "",
|
||||
"<3,62>": "0",
|
||||
"<3,63>": "",
|
||||
"<3,64>": {
|
||||
"<3,64,1>": "-2",
|
||||
"<3,64,2>": "-2",
|
||||
"<3,64,3>": "0"
|
||||
},
|
||||
"<3,65>": "-2",
|
||||
"<3,66>": "",
|
||||
"<3,67>": "",
|
||||
"<3,68>": "",
|
||||
"<3,69>": "",
|
||||
"<3,70>": "",
|
||||
"<3,71>": "",
|
||||
"<3,72>": "",
|
||||
"<3,73>": "",
|
||||
"<3,74>": "",
|
||||
"<3,75>": "",
|
||||
"<3,76>": "",
|
||||
"<3,77>": "",
|
||||
"<3,78>": "",
|
||||
"<3,79>": "",
|
||||
"<3,80>": "",
|
||||
"<3,81>": "",
|
||||
"<3,82>": "",
|
||||
"<3,83>": "",
|
||||
"<3,84>": "",
|
||||
"<3,85>": "",
|
||||
"<3,86>": "",
|
||||
"<3,87>": "",
|
||||
"<3,88>": "",
|
||||
"<3,89>": "",
|
||||
"<3,90>": "0",
|
||||
"<3,91>": "0",
|
||||
"<3,92>": "",
|
||||
"<3,93>": "",
|
||||
"<3,94>": "",
|
||||
"<3,95>": "",
|
||||
"<3,96>": "",
|
||||
"<3,97>": "",
|
||||
"<3,98>": "",
|
||||
"<3,99>": "",
|
||||
"<3,100>": "",
|
||||
"<3,101>": "",
|
||||
"<3,102>": "",
|
||||
"<3,103>": "",
|
||||
"<3,104>": "",
|
||||
"<3,105>": "",
|
||||
"<3,106>": "",
|
||||
"<3,107>": "",
|
||||
"<3,108>": ""
|
||||
}
|
||||
},
|
||||
"record4": {
|
||||
"<1>": ""
|
||||
}
|
||||
}
|
||||
}
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -423,7 +423,7 @@
|
||||
"<1,31>": "",
|
||||
"<1,32>": "",
|
||||
"<1,33>": "",
|
||||
"<1,34>": "",
|
||||
"<1,34>": "LSL2*IMAGE*ICO*INFINEON",
|
||||
"<1,35>": "",
|
||||
"<1,36>": "",
|
||||
"<1,37>": {
|
||||
|
@ -6655,13 +6655,6 @@
|
||||
"<41,35,3,3>": "",
|
||||
"<41,35,3,4>": "",
|
||||
"<41,35,3,5>": ""
|
||||
},
|
||||
"<41,35,4>": {
|
||||
"<41,35,4,1>": "",
|
||||
"<41,35,4,2>": "",
|
||||
"<41,35,4,3>": "",
|
||||
"<41,35,4,4>": "",
|
||||
"<41,35,4,5>": ""
|
||||
}
|
||||
},
|
||||
"<41,36>": "",
|
||||
@ -7886,7 +7879,7 @@
|
||||
"<45,10,2>": "0x200"
|
||||
},
|
||||
"<45,11>": {
|
||||
"<45,11,1>": "0x0",
|
||||
"<45,11,1>": "0x80000",
|
||||
"<45,11,2>": "0x80000000"
|
||||
},
|
||||
"<45,12>": "45",
|
||||
@ -7922,7 +7915,7 @@
|
||||
"<45,21>": "",
|
||||
"<45,22>": "",
|
||||
"<45,23>": "WM_OUT",
|
||||
"<45,24>": "SPECIAL_INST",
|
||||
"<45,24>": "SPEC_INST",
|
||||
"<45,25>": "",
|
||||
"<45,26>": "",
|
||||
"<45,27>": "",
|
||||
|
@ -40,7 +40,7 @@
|
||||
"<8,2>": {
|
||||
"<8,2,1>": "MET",
|
||||
"<8,2,2>": "Metrology",
|
||||
"<8,2,3>": "TODD_C, JEANNE_M"
|
||||
"<8,2,3>": "TODD_C, JEANNE_M, JFUENTE1, JUSTIN_H, JONATHON_S, MARROQUINBRA, TIFFANY_M"
|
||||
},
|
||||
"<8,3>": {
|
||||
"<8,3,1>": "MTC",
|
||||
|
@ -9,7 +9,7 @@
|
||||
"<2>": "-1",
|
||||
"<3>": "-1",
|
||||
"<4>": "-1",
|
||||
"<5>": "16777215",
|
||||
"<5>": "-2",
|
||||
"<6>": {
|
||||
"<6,1>": {
|
||||
"<6,1,1>": "Tahoma",
|
||||
@ -31,7 +31,7 @@
|
||||
}
|
||||
},
|
||||
"<7>": "REACT_ITEM",
|
||||
"<8>": "BY @ID",
|
||||
"<8>": "BY-DSND ENTER_DTM",
|
||||
"<9>": {
|
||||
"<9,1>": {
|
||||
"<9,1,1>": "RI_NO",
|
||||
@ -120,6 +120,22 @@
|
||||
"<9,11,4>": "C",
|
||||
"<9,11,5>": "D4/",
|
||||
"<9,11,6>": "Retire Dt"
|
||||
},
|
||||
"<9,12>": {
|
||||
"<9,12,1>": "ENTER_DTM",
|
||||
"<9,12,2>": "14",
|
||||
"<9,12,3>": "L",
|
||||
"<9,12,4>": "C",
|
||||
"<9,12,5>": "DT2/^H",
|
||||
"<9,12,6>": "Enter Dtm"
|
||||
},
|
||||
"<9,13>": {
|
||||
"<9,13,1>": "CURR_STATUS",
|
||||
"<9,13,2>": "5",
|
||||
"<9,13,3>": "L",
|
||||
"<9,13,4>": "C",
|
||||
"<9,13,5>": "[CONV_ITEM_CURR_STATUS]",
|
||||
"<9,13,6>": "Curr Status"
|
||||
}
|
||||
},
|
||||
"<10>": "T",
|
||||
@ -147,7 +163,17 @@
|
||||
"<32>": "0",
|
||||
"<33>": "1",
|
||||
"<34>": "16777215",
|
||||
"<35>": "16777215"
|
||||
"<35>": "16766894",
|
||||
"<36>": "",
|
||||
"<37>": "",
|
||||
"<38>": "",
|
||||
"<39>": "",
|
||||
"<40>": "-2",
|
||||
"<41>": "1000",
|
||||
"<42>": "",
|
||||
"<43>": "",
|
||||
"<44>": "",
|
||||
"<45>": ""
|
||||
}
|
||||
}
|
||||
}
|
@ -9,7 +9,7 @@
|
||||
"<2>": "-1",
|
||||
"<3>": "-1",
|
||||
"<4>": "-1",
|
||||
"<5>": "16777215",
|
||||
"<5>": "-2",
|
||||
"<6>": {
|
||||
"<6,1>": {
|
||||
"<6,1,1>": "MS Sans Serif",
|
||||
@ -91,7 +91,17 @@
|
||||
"<32>": "0",
|
||||
"<33>": "1",
|
||||
"<34>": "16777215",
|
||||
"<35>": "16777215"
|
||||
"<35>": "16777215",
|
||||
"<36>": "",
|
||||
"<37>": "",
|
||||
"<38>": "",
|
||||
"<39>": "",
|
||||
"<40>": "-2",
|
||||
"<41>": "1000",
|
||||
"<42>": "",
|
||||
"<43>": "",
|
||||
"<44>": "",
|
||||
"<45>": ""
|
||||
}
|
||||
}
|
||||
}
|
@ -235,7 +235,7 @@ Service SendReminders()
|
||||
IF CLType = 'E' THEN
|
||||
Desc = CLRec<CALIB_LIST_EQ_DESC$>
|
||||
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$
|
||||
END
|
||||
IF CLType = 'S' THEN
|
||||
|
@ -51,11 +51,11 @@ RETURN Result
|
||||
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
|
||||
|
||||
@ -77,82 +77,85 @@ ReactNoGF:
|
||||
LUReactor:
|
||||
* * * * * * *
|
||||
|
||||
IF NOT(ASSIGNED(Parm1)) THEN FocusControl = '' ELSE FocusControl = Parm1
|
||||
IF NOT(ASSIGNED(Parm2)) THEN FocusPos = '' ELSE FocusPos = Parm2
|
||||
IF NOT(ASSIGNED(Parm1)) THEN FocusControl = '' ELSE FocusControl = Parm1
|
||||
IF NOT(ASSIGNED(Parm2)) THEN FocusPos = '' ELSE FocusPos = Parm2
|
||||
|
||||
Set_Status(0)
|
||||
Set_Status(0)
|
||||
|
||||
TypeOver = ''
|
||||
TypeOver<PSELECT$> = '2' ;* Multiple Select
|
||||
TypeOver<PTYPE$> = 'E' ;* Return entire row
|
||||
TypeOver = ''
|
||||
TypeOver<PSELECT$> = '2' ;* Multiple Select
|
||||
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 '')
|
||||
ColCnt = 7
|
||||
LineCnt = COUNT(ReactData,@FM) + (ReactData NE '')
|
||||
ColCnt = 7
|
||||
|
||||
FOR Line = 1 TO LineCnt
|
||||
FOR Column = 2 TO ColCnt
|
||||
stat = Send_Message(@WINDOW:'.REACT_NO','COLOR_BY_POS',Column,Line,GREEN$)
|
||||
NEXT Column
|
||||
NEXT Line
|
||||
FOR Line = 1 TO LineCnt
|
||||
FOR Column = 2 TO ColCnt
|
||||
stat = Send_Message(@WINDOW:'.REACT_NO','COLOR_BY_POS',Column,Line,GREEN$)
|
||||
NEXT Column
|
||||
NEXT Line
|
||||
|
||||
RETURN
|
||||
|
||||
|
||||
|
||||
|
||||
* * * * * * *
|
||||
Cancel:
|
||||
* * * * * * *
|
||||
|
||||
End_Dialog(@WINDOW,'')
|
||||
End_Dialog(@WINDOW,'')
|
||||
|
||||
RETURN
|
||||
|
||||
|
||||
|
||||
* * * * * * *
|
||||
PostEntries:
|
||||
* * * * * * *
|
||||
|
||||
ReactNos = Get_Property(@WINDOW:'.REACT_NO','ARRAY')<COL$REACT_NO>
|
||||
Comment = Get_Property(@WINDOW:'.COMMENT','DEFPROP')
|
||||
ReactNos = Get_Property(@WINDOW:'.REACT_NO','ARRAY')<COL$REACT_NO>
|
||||
Comment = Get_Property(@WINDOW:'.COMMENT','DEFPROP')
|
||||
|
||||
LOOP
|
||||
TestChar = ReactNos[-1,1]
|
||||
UNTIL TestChar NE @VM OR ReactNos = ''
|
||||
ReactNos[-1,1] = ''
|
||||
REPEAT
|
||||
LOOP
|
||||
TestChar = ReactNos[-1,1]
|
||||
UNTIL TestChar NE @VM OR ReactNos = ''
|
||||
ReactNos[-1,1] = ''
|
||||
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
|
||||
EventType = 'PD' ;* Passdown
|
||||
LoggedBy = @USER4
|
||||
EventDTM = OCONV(Date(),'D4/'):' ':OCONV(Time(),'MTS') ;* Same DTM for all new records
|
||||
EventType = 'PD' ;* Passdown
|
||||
LoggedBy = @USER4
|
||||
|
||||
ReactCnt = COUNT(ReactNos,@VM) + (ReactNos NE '')
|
||||
ReactCnt = COUNT(ReactNos,@VM) + (ReactNos NE '')
|
||||
|
||||
FOR I = 1 TO ReactCnt
|
||||
ReactNo = ReactNos<1,I>
|
||||
CurrMode = XLATE('REACTOR',ReactNo,'CURR_MODE','X')
|
||||
FOR I = 1 TO ReactCnt
|
||||
ReactNo = ReactNos<1,I>
|
||||
CurrMode = XLATE('REACTOR',ReactNo,'CURR_MODE','X')
|
||||
|
||||
obj_React_Event('Create',ReactNo:@RM:EventDTM:@RM:EventType:@RM:LoggedBy:@RM:Comment:@RM:@RM:CurrMode)
|
||||
EventKeys<I> = ReactNo:'*':ICONV(EventDTM,'DT')
|
||||
NEXT I
|
||||
obj_React_Event('Create',ReactNo:@RM:EventDTM:@RM:EventType:@RM:LoggedBy:@RM:Comment:@RM:@RM:CurrMode)
|
||||
|
||||
END
|
||||
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
|
||||
|
||||
End_Dialog(@WINDOW,EventKeys)
|
||||
EventKeys<I> = ReactNo:'*':ICONV(EventDTM,'DT')
|
||||
NEXT I
|
||||
|
||||
END else
|
||||
Msg(@Window, '', 'OK', '', 'Process Error':@FM:'React No(s) and Comment must not be null!')
|
||||
end
|
||||
|
||||
RETURN
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -582,170 +582,130 @@ Refresh:
|
||||
|
||||
If @WINDOW EQ 'RDS_UNLOAD' then
|
||||
|
||||
DevelopmentFlag = Xlate('DEVELOPMENT', 'HGCV', 'STATUS', 'X')
|
||||
CtrlName = @WINDOW:'.EDT_QA_MET'
|
||||
Set_Property(@Window : '.MET_TEST', 'VISIBLE', False$)
|
||||
Set_Property(CtrlName, 'VISIBLE', True$)
|
||||
MetList = Get_Property(CtrlName,'LIST')
|
||||
ThickOutOfSpec = False$
|
||||
CresOutOfSpec = False$
|
||||
MLCnt = COUNT(MetList,@FM) + (MetList NE '')
|
||||
FOR Line = 1 TO MLCnt
|
||||
IF MetList<Line,COL$UL_MET_TEST> NE '' THEN
|
||||
MetResult = MetList<Line,COL$UL_MET_RESULT>
|
||||
MetMin = MetList<Line,COL$UL_MET_MIN>
|
||||
MetMax = MetList<Line,COL$UL_MET_MAX>
|
||||
PhaseMin = MetList<Line,COL$UL_MET_PHASE_MIN>
|
||||
PhaseResult = MetList<Line,COL$UL_MET_PHASE_RESULT>
|
||||
ScanRecipe = MetList<Line,COL$UL_MET_RECIPE>
|
||||
PSN = Get_Property(@Window : '.PSN', 'TEXT')
|
||||
PRSStageKey = PSN:'*UNLOAD'
|
||||
MetTest = MetList<Line,COL$UL_MET_TEST>
|
||||
PRSStageRec = Database_Services('ReadDataRow', 'PRS_STAGE', PRSStageKey)
|
||||
SpecTests = PRSStageRec<PRS_STAGE_MET_TEST$>
|
||||
SpecRecipe = ''
|
||||
RDSNo = Get_Property(@Window:'.RDS_NO', 'TEXT')
|
||||
QAMetKey = Xlate('RDS', RDSNo, 'WO_MAT_KEY', 'X')
|
||||
WOMatQARec = Database_Services('ReadDataRow', 'WO_MAT_QA', QAMetKey)
|
||||
DataPoints = WOMatQARec<WO_MAT_QA_DATA_POINTS$, Line>
|
||||
Begin Case
|
||||
Case MetTest EQ 'THICK_ONLY'
|
||||
// Check each point to see if any are out of spec
|
||||
For each DataPoint in DataPoints using @SVM setting ThickIndex
|
||||
Until DataPoint EQ ''
|
||||
Begin Case
|
||||
Case ThickIndex GT 10
|
||||
Null
|
||||
Case (DataPoint EQ '')
|
||||
ThickOutOfSpec = True$
|
||||
Case (DataPoint GT MetMax) OR (DataPoint LT MetMin)
|
||||
ThickOutOfSpec = True$
|
||||
End Case
|
||||
Next DataPoint
|
||||
|
||||
If (DevelopmentFlag EQ True$) then
|
||||
Case MetTest EQ 'CRES'
|
||||
// Check critical points to see if any are out of spec (both HgCV and Phase)
|
||||
CriticalPoints = '1,2,5,6,9'
|
||||
For each DataPoint in DataPoints using @SVM setting CresIndex
|
||||
Until DataPoint EQ ''
|
||||
HgCVDataPoint = DataPoint[1, 'F':@TM]
|
||||
PhaseDataPoint = DataPoint[-1, 'B':@TM]
|
||||
CriticalPoint = Index(CriticalPoints, CresIndex, 1)
|
||||
Begin Case
|
||||
Case (HgCVDataPoint EQ '') and CriticalPoint
|
||||
CresOutOfSpec = True$
|
||||
Case (PhaseDataPoint EQ '') and CriticalPoint
|
||||
CresOutOfSpec = True$
|
||||
Case (HgCVDataPoint GT MetMax) OR (HgCVDataPoint LT MetMin) and CriticalPoint
|
||||
CresOutOfSpec = True$
|
||||
Case (PhaseDataPoint LT PhaseMin) and CriticalPoint
|
||||
CresOutOfSpec = True$
|
||||
End Case
|
||||
Next DataPoint
|
||||
End Case
|
||||
QAMetOutofSpec = (ThickOutOfSpec or CresOutOfSpec)
|
||||
Locate MetTest in SpecTests using @VM setting vPos then
|
||||
SpecRecipe = PRSStageRec<PRS_STAGE_MET_RECIPE$, vPos>
|
||||
end
|
||||
NoError = True$
|
||||
|
||||
CtrlName = @WINDOW:'.EDT_QA_MET'
|
||||
Set_Property(@Window : '.MET_TEST', 'VISIBLE', False$)
|
||||
Set_Property(CtrlName, 'VISIBLE', True$)
|
||||
MetList = Get_Property(CtrlName,'LIST')
|
||||
ThickOutOfSpec = False$
|
||||
CresOutOfSpec = False$
|
||||
MLCnt = COUNT(MetList,@FM) + (MetList NE '')
|
||||
FOR Line = 1 TO MLCnt
|
||||
IF MetList<Line,COL$UL_MET_TEST> NE '' THEN
|
||||
MetResult = MetList<Line,COL$UL_MET_RESULT>
|
||||
MetMin = MetList<Line,COL$UL_MET_MIN>
|
||||
MetMax = MetList<Line,COL$UL_MET_MAX>
|
||||
PhaseMin = MetList<Line,COL$UL_MET_PHASE_MIN>
|
||||
PhaseResult = MetList<Line,COL$UL_MET_PHASE_RESULT>
|
||||
ScanRecipe = MetList<Line,COL$UL_MET_RECIPE>
|
||||
PSN = Get_Property(@Window : '.PSN', 'TEXT')
|
||||
PRSStageKey = PSN:'*UNLOAD'
|
||||
MetTest = MetList<Line,COL$UL_MET_TEST>
|
||||
PRSStageRec = Database_Services('ReadDataRow', 'PRS_STAGE', PRSStageKey)
|
||||
SpecTests = PRSStageRec<PRS_STAGE_MET_TEST$>
|
||||
SpecRecipe = ''
|
||||
RDSNo = Get_Property(@Window:'.RDS_NO', 'TEXT')
|
||||
QAMetKey = Xlate('RDS', RDSNo, 'WO_MAT_KEY', 'X')
|
||||
WOMatQARec = Database_Services('ReadDataRow', 'WO_MAT_QA', QAMetKey)
|
||||
DataPoints = WOMatQARec<WO_MAT_QA_DATA_POINTS$, Line>
|
||||
Begin Case
|
||||
Case MetTest EQ 'THICK_ONLY'
|
||||
// Check each point to see if any are out of spec
|
||||
For each DataPoint in DataPoints using @SVM setting ThickIndex
|
||||
Until DataPoint EQ ''
|
||||
Begin Case
|
||||
Case ThickIndex GT 10
|
||||
Null
|
||||
Case (DataPoint EQ '')
|
||||
ThickOutOfSpec = True$
|
||||
Case (DataPoint GT MetMax) OR (DataPoint LT MetMin)
|
||||
ThickOutOfSpec = True$
|
||||
End Case
|
||||
Next DataPoint
|
||||
If (MetList<Line,COL$UL_MET_RESULT> EQ '') then
|
||||
Color = YELLOW$
|
||||
stat = Send_Message(CtrlName, 'COLOR_BY_POS', COL$UL_MET_RESULT, Line, Color)
|
||||
NoError = False$
|
||||
end
|
||||
|
||||
Case MetTest EQ 'CRES'
|
||||
// Check critical points to see if any are out of spec (both HgCV and Phase)
|
||||
CriticalPoints = '1,2,5,6,9'
|
||||
For each DataPoint in DataPoints using @SVM setting CresIndex
|
||||
Until DataPoint EQ ''
|
||||
HgCVDataPoint = DataPoint[1, 'F':@TM]
|
||||
PhaseDataPoint = DataPoint[-1, 'B':@TM]
|
||||
CriticalPoint = Index(CriticalPoints, CresIndex, 1)
|
||||
Begin Case
|
||||
Case (HgCVDataPoint EQ '') and CriticalPoint
|
||||
CresOutOfSpec = True$
|
||||
Case (PhaseDataPoint EQ '') and CriticalPoint
|
||||
CresOutOfSpec = True$
|
||||
Case (HgCVDataPoint GT MetMax) OR (HgCVDataPoint LT MetMin) and CriticalPoint
|
||||
CresOutOfSpec = True$
|
||||
Case (PhaseDataPoint LT PhaseMin) and CriticalPoint
|
||||
CresOutOfSpec = True$
|
||||
End Case
|
||||
Next DataPoint
|
||||
End Case
|
||||
QAMetOutofSpec = (ThickOutOfSpec or CresOutOfSpec)
|
||||
Locate MetTest in SpecTests using @VM setting vPos then
|
||||
SpecRecipe = PRSStageRec<PRS_STAGE_MET_RECIPE$, vPos>
|
||||
end
|
||||
NoError = True$
|
||||
If QAMetOutofSpec EQ True$ then
|
||||
Color = BYELLOW$:@FM:BLACK$:@FM:BYELLOW$:@FM:BLACK$
|
||||
stat = Send_Message(CtrlName, 'COLOR_BY_POS', COL$UL_MET_RESULT, Line, Color)
|
||||
NoError = False$
|
||||
end
|
||||
|
||||
If (MetList<Line,COL$UL_MET_RESULT> EQ '') then
|
||||
Color = YELLOW$
|
||||
stat = Send_Message(CtrlName, 'COLOR_BY_POS', COL$UL_MET_RESULT, Line, Color)
|
||||
NoError = False$
|
||||
end
|
||||
If (MetResult LT MetMin) then
|
||||
Color = RED$:@FM:'':@FM:BRED$:@FM:''
|
||||
stat = Send_Message(CtrlName, 'COLOR_BY_POS', COL$UL_MET_RESULT, Line, Color)
|
||||
NoError = False$
|
||||
end
|
||||
|
||||
If QAMetOutofSpec EQ True$ then
|
||||
Color = BYELLOW$:@FM:BLACK$:@FM:BYELLOW$:@FM:BLACK$
|
||||
stat = Send_Message(CtrlName, 'COLOR_BY_POS', COL$UL_MET_RESULT, Line, Color)
|
||||
NoError = False$
|
||||
end
|
||||
If (MetResult GT MetMax) then
|
||||
Color = RED$:@FM:'':@FM:BRED$:@FM:''
|
||||
stat = Send_Message(CtrlName, 'COLOR_BY_POS', COL$UL_MET_RESULT, Line, Color)
|
||||
NoError = False$
|
||||
end
|
||||
|
||||
If (MetResult LT MetMin) then
|
||||
Color = RED$:@FM:'':@FM:BRED$:@FM:''
|
||||
stat = Send_Message(CtrlName, 'COLOR_BY_POS', COL$UL_MET_RESULT, Line, Color)
|
||||
NoError = False$
|
||||
end
|
||||
If (PhaseResult LT PhaseMin) then
|
||||
Color = RED$:@FM:'':@FM:BRED$:@FM:''
|
||||
stat = Send_Message(CtrlName, 'COLOR_BY_POS', COL$UL_MET_PHASE_RESULT, Line, Color)
|
||||
NoError = False$
|
||||
end
|
||||
|
||||
If (MetResult GT MetMax) then
|
||||
Color = RED$:@FM:'':@FM:BRED$:@FM:''
|
||||
stat = Send_Message(CtrlName, 'COLOR_BY_POS', COL$UL_MET_RESULT, Line, Color)
|
||||
NoError = False$
|
||||
end
|
||||
QAFailReason = WOMatQARec<WO_MAT_QA_FAIL_REASON$, Line>
|
||||
DetectedFail = Index(QAFailReason, 'Number of data points is less than the required amount', 1)
|
||||
If (ScanRecipe NE SpecRecipe) OR (DetectedFail) then
|
||||
Color = RED$:@FM:'':@FM:BRED$:@FM:''
|
||||
stat = Send_Message(CtrlName, 'COLOR_BY_POS', COL$UL_MET_RECIPE, Line, Color)
|
||||
NoError = False$
|
||||
end
|
||||
|
||||
If (PhaseResult LT PhaseMin) then
|
||||
Color = RED$:@FM:'':@FM:BRED$:@FM:''
|
||||
stat = Send_Message(CtrlName, 'COLOR_BY_POS', COL$UL_MET_PHASE_RESULT, Line, Color)
|
||||
NoError = False$
|
||||
end
|
||||
If (NoError EQ True$) then
|
||||
Color = GREEN$
|
||||
stat = Send_Message(CtrlName,'COLOR_BY_POS',0,Line,Color)
|
||||
end
|
||||
|
||||
QAFailReason = WOMatQARec<WO_MAT_QA_FAIL_REASON$, Line>
|
||||
DetectedFail = Index(QAFailReason, 'Number of data points is less than the required amount', 1)
|
||||
If (ScanRecipe NE SpecRecipe) OR (DetectedFail) then
|
||||
Color = RED$:@FM:'':@FM:BRED$:@FM:''
|
||||
stat = Send_Message(CtrlName, 'COLOR_BY_POS', COL$UL_MET_RECIPE, Line, Color)
|
||||
NoError = False$
|
||||
end
|
||||
END ELSE
|
||||
Color = GREEN$
|
||||
stat = Send_Message(CtrlName,'COLOR_BY_POS',0,Line,Color)
|
||||
END
|
||||
|
||||
If (NoError EQ True$) then
|
||||
Color = GREEN$
|
||||
stat = Send_Message(CtrlName,'COLOR_BY_POS',0,Line,Color)
|
||||
end
|
||||
NEXT Line
|
||||
|
||||
END ELSE
|
||||
Color = GREEN$
|
||||
stat = Send_Message(CtrlName,'COLOR_BY_POS',0,Line,Color)
|
||||
END
|
||||
Set_Property(@WINDOW:'.BUTTON_11','ENABLED',EnableUnloadButton)
|
||||
|
||||
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 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
|
||||
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 of check for Unload OR Post_Epi windows
|
||||
|
||||
****************************************************************************************************************************************
|
||||
@ -2669,9 +2629,8 @@ MetTestDC:
|
||||
Lines = Get_Property(@WINDOW:'.MET_TEST', 'LIST')
|
||||
TestLine = Lines<CurrRow>
|
||||
LWRHOTest = Indexc(TestLine, 'LW_RHO', 1)
|
||||
DevelopmentFlag = Xlate('DEVELOPMENT', 'HGCV', 'STATUS', 'X')
|
||||
|
||||
If (DevelopmentFlag EQ True$) and (@Window EQ 'RDS_UNLOAD') and (LWRHOTest EQ False$) then
|
||||
If (@Window EQ 'RDS_UNLOAD') and (LWRHOTest EQ False$) then
|
||||
Ctrls := @WINDOW:'.EDT_QA_MET':@RM ; Props := 'SELPOS':@RM
|
||||
Ctrls := @WINDOW:'.EDT_QA_MET' ; Props := 'LIST'
|
||||
end else
|
||||
@ -2708,8 +2667,7 @@ MetTestDC:
|
||||
BEGIN CASE
|
||||
CASE MetTest EQ ''
|
||||
Null
|
||||
|
||||
CASE (@WINDOW = 'RDS_UNLOAD') and (DevelopmentFlag EQ True$) and (LWRHOTest EQ False$)
|
||||
CASE (@WINDOW = 'RDS_UNLOAD') and (LWRHOTest EQ False$)
|
||||
ReturnVal = Dialog_Box('NDW_QA_MET_RESULT', @WINDOW, CassID)
|
||||
Send_Event(@Window, "READ")
|
||||
CASE Otherwise$
|
||||
@ -2863,57 +2821,47 @@ return
|
||||
|
||||
RefreshWaferCounterData:
|
||||
|
||||
WCCheckEnabled = Xlate('APP_INFO', 'WAFER_COUNTER_CHECK', '', 'X')
|
||||
If WCCheckEnabled then
|
||||
Set_Property(@Window:'.LBL_WAFER_COUNTER_QTY', 'VISIBLE', True$)
|
||||
Set_Property(@Window:'.EDL_WAFER_COUNTER_QTY', 'VISIBLE', True$)
|
||||
QtyBackColor = GREEN$
|
||||
RDSNo = Get_Property(@Window : '.RDS_NO','DEFPROP')
|
||||
If RDSNo NE '' then
|
||||
FqaWcRec = Wafer_Counter_Services('GetLastScan', RDSNo, 'QA')
|
||||
WaferCounterQty = FqaWcRec<WAFER_COUNTER.SCAN_QTY$>
|
||||
Set_Property(@Window, '@ORIG_WFR_CTR_QTY', WaferCounterQty)
|
||||
WafersOut = Get_Property(@WINDOW:'.WAFERS_OUT','TEXT')
|
||||
Set_Property(@WINDOW:'.EDL_WAFER_COUNTER_QTY','DEFPROP', WaferCounterQty)
|
||||
|
||||
Set_Property(@Window:'.LBL_WAFER_COUNTER_QTY', 'VISIBLE', True$)
|
||||
Set_Property(@Window:'.EDL_WAFER_COUNTER_QTY', 'VISIBLE', True$)
|
||||
QtyBackColor = GREEN$
|
||||
RDSNo = Get_Property(@Window : '.RDS_NO','DEFPROP')
|
||||
If RDSNo NE '' then
|
||||
FqaWcRec = Wafer_Counter_Services('GetLastScan', RDSNo, 'QA')
|
||||
WaferCounterQty = FqaWcRec<WAFER_COUNTER.SCAN_QTY$>
|
||||
Set_Property(@Window, '@ORIG_WFR_CTR_QTY', WaferCounterQty)
|
||||
WafersOut = Get_Property(@WINDOW:'.WAFERS_OUT','TEXT')
|
||||
Set_Property(@WINDOW:'.EDL_WAFER_COUNTER_QTY','DEFPROP', WaferCounterQty)
|
||||
*****************************************
|
||||
* WaferCounter - Wafers Quantity Section *
|
||||
*****************************************
|
||||
If (WaferCounterQty NE '') then
|
||||
If (WaferCounterQty NE WafersOut) then QtyBackColor = RED$
|
||||
end else
|
||||
QtyBackColor = ORANGE$
|
||||
end
|
||||
|
||||
*****************************************
|
||||
* WaferCounter - Wafers Quantity Section *
|
||||
*****************************************
|
||||
If (WaferCounterQty NE '') then
|
||||
If (WaferCounterQty NE WafersOut) then QtyBackColor = RED$
|
||||
end else
|
||||
QtyBackColor = ORANGE$
|
||||
end
|
||||
|
||||
WaferSize = Xlate('RDS', RDSNo, 'WAFER_SIZE', 'X')
|
||||
WaferSize = Field(WaferSize, ' ', 3, 1)
|
||||
If ( (WaferSize EQ 6) or (WaferSize EQ 8) ) then
|
||||
WCToolId = Wafer_Counter_Services('GetWaferCounterToolID', WaferSize:'INCH', 'QA')
|
||||
If Error_Services('NoError') then
|
||||
WCCurrMode = ''
|
||||
If RowExists('TOOL', WCToolID) then
|
||||
WCCurrModeKey = Xlate('TOOL', WCToolID, 'CURR_MODE_KEY', 'X')
|
||||
WCCurrMode = Xlate('TOOL_LOG', WCCurrModeKey, 'TOOL_MODE', 'X')
|
||||
Set_Property(@WINDOW:'.EDL_WAFER_COUNTER_QTY', 'ENABLED', (WCCurrMode NE 'PROD'))
|
||||
end else
|
||||
ErrMsg('Verify wafer count error. Invalid wafer counter tool ID "':WCToolID:'".')
|
||||
end
|
||||
WaferSize = Xlate('RDS', RDSNo, 'WAFER_SIZE', 'X')
|
||||
WaferSize = Field(WaferSize, ' ', 3, 1)
|
||||
If ( (WaferSize EQ 6) or (WaferSize EQ 8) ) then
|
||||
WCToolId = Wafer_Counter_Services('GetWaferCounterToolID', WaferSize:'INCH', 'QA')
|
||||
If Error_Services('NoError') then
|
||||
WCCurrMode = ''
|
||||
If RowExists('TOOL', WCToolID) then
|
||||
WCCurrModeKey = Xlate('TOOL', WCToolID, 'CURR_MODE_KEY', 'X')
|
||||
WCCurrMode = Xlate('TOOL_LOG', WCCurrModeKey, 'TOOL_MODE', 'X')
|
||||
Set_Property(@WINDOW:'.EDL_WAFER_COUNTER_QTY', 'ENABLED', (WCCurrMode NE 'PROD'))
|
||||
end else
|
||||
ErrMsg(Error_Services('GetMessage'))
|
||||
ErrMsg('Verify wafer count error. Invalid wafer counter tool ID "':WCToolID:'".')
|
||||
end
|
||||
end else
|
||||
ErrMsg('Verify wafer count error. Invalid wafer size "':WaferSize:'" returned for RDS "':RDSNo:'".')
|
||||
ErrMsg(Error_Services('GetMessage'))
|
||||
end
|
||||
end else
|
||||
ErrMsg('Verify wafer count error. Invalid wafer size "':WaferSize:'" returned for RDS "':RDSNo:'".')
|
||||
end
|
||||
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
|
||||
end
|
||||
Set_Property(@WINDOW:'.EDL_WAFER_COUNTER_QTY','BACKCOLOR', QtyBackColor)
|
||||
|
||||
return
|
||||
|
||||
|
||||
|
||||
|
@ -20,7 +20,7 @@ Declare Function Get_Property, Get_Status, Dialog_Box, Utility, Popup, Collect.I
|
||||
Declare Function Send_Message, Msg, Security_Check, obj_React_Item, Select_Into, MemberOf, Create_Dialog, obj_Calendar
|
||||
Declare Function GetAsyncKeyState, obj_Tables, MemberOf, Environment_Services, Database_Services, Rds_Services
|
||||
Declare Function Reactor_Services, Error_Services, React_Servs_Services, Reactor_Log_Services, Send_Event, SRP_List
|
||||
Declare Function Nica_Orders_Services
|
||||
Declare Function Nica_Orders_Services, SRP_Date, React_Item_Services, SRP_Datetime, Datetime
|
||||
|
||||
$Insert MSG_EQUATES
|
||||
$Insert APPCOLORS
|
||||
@ -1229,64 +1229,51 @@ SvcsOptions:
|
||||
If ItemType NE '' then
|
||||
|
||||
RetVal = ''
|
||||
|
||||
ItemType = ICONV(ItemType,'[CONV_CODE_DESC,REACT_ITEM_TYPE]')
|
||||
|
||||
OPEN 'DICT.REACT_ITEM' to DictReactItem else
|
||||
ErrMsg('Unable to open DICT.REACT_ITEM')
|
||||
return
|
||||
end
|
||||
RIKeys = React_Item_Services('GetReactItems', ItemType, 'N,U')
|
||||
|
||||
SearchString = 'RI_TYPE':@VM:ItemType:@FM
|
||||
SearchString := 'CURR_STATUS':@VM:'N':@VM:'U':@FM
|
||||
If Error_Services('NoError') then
|
||||
|
||||
RIKeys = ''
|
||||
Option = ''
|
||||
Flag = ''
|
||||
TypeOver = ''
|
||||
TypeOVer<PMODE$> = 'K'
|
||||
TypeOver<PDISPLAY$> = RIKeys
|
||||
RetVal = Popup(@Window,TypeOver,'REACT_ITEM')
|
||||
|
||||
Btree.Extract(SearchString,'REACT_ITEM',DictReactItem,RIKeys,Option,Flag)
|
||||
If Get_Status(errCode) then
|
||||
ErrMsg(errCode)
|
||||
return
|
||||
end
|
||||
If RetVal NE '' then
|
||||
obj_AppWindow('LUValReturn',RetVal:@RM:@Window:'.SERV_INFO':@RM:SelPos)
|
||||
|
||||
TypeOver = ''
|
||||
TypeOVer<PMODE$> = 'K'
|
||||
TypeOver<PDISPLAY$> = RIKeys
|
||||
RetVal = Popup(@Window,TypeOver,'REACT_ITEM')
|
||||
RIRec = XLATE('REACT_ITEM',RetVal,'','X')
|
||||
|
||||
If RetVal NE '' then
|
||||
obj_AppWindow('LUValReturn',RetVal:@RM:@Window:'.SERV_INFO':@RM:SelPos)
|
||||
If RIRec<REACT_ITEM_RI_TYPE$> = 'T' then
|
||||
CardWindow = 'REACT_ITEM'
|
||||
CardKey = RetVal
|
||||
DefaultRec = ''
|
||||
NewCardCtrl = ''
|
||||
RecalcCtrl = @Window:'.SERV_INFO'
|
||||
RecalcPos = SelPos
|
||||
RetCtrl = @Window:'.SERV_INFO'
|
||||
RetPos = SelPos
|
||||
|
||||
RIRec = XLATE('REACT_ITEM',RetVal,'','X')
|
||||
oAParms = CardWindow:@RM:CardKey:@RM:DefaultRec:@RM:NewCardCtrl:@RM:RecalcCtrl:@RM:RecalcPos:@RM:RetCtrl:@RM:RetPos
|
||||
|
||||
If RIRec<REACT_ITEM_RI_TYPE$> = 'T' then
|
||||
CardWindow = 'REACT_ITEM'
|
||||
CardKey = RetVal
|
||||
DefaultRec = ''
|
||||
NewCardCtrl = ''
|
||||
RecalcCtrl = @Window:'.SERV_INFO'
|
||||
RecalcPos = SelPos
|
||||
RetCtrl = @Window:'.SERV_INFO'
|
||||
RetPos = SelPos
|
||||
obj_AppWindow('ViewNewCard',oAParms)
|
||||
|
||||
oAParms = CardWindow:@RM:CardKey:@RM:DefaultRec:@RM:NewCardCtrl:@RM:RecalcCtrl:@RM:RecalcPos:@RM:RetCtrl:@RM:RetPos
|
||||
Set_Property('REACT_ITEM.TUBE_GRADE','FOCUS',1)
|
||||
|
||||
obj_AppWindow('ViewNewCard',oAParms)
|
||||
If Get_Status(errCode) then
|
||||
ErrMsg(errCode)
|
||||
end
|
||||
end
|
||||
|
||||
Set_Property('REACT_ITEM.TUBE_GRADE','FOCUS',1)
|
||||
|
||||
If Get_Status(errCode) then
|
||||
ErrMsg(errCode)
|
||||
end
|
||||
end
|
||||
|
||||
GoSub Refresh
|
||||
GoSub Refresh
|
||||
end
|
||||
end else
|
||||
Error_Services('DisplayError')
|
||||
end
|
||||
|
||||
end ;* End of check for null SNReq
|
||||
|
||||
|
||||
End Case
|
||||
|
||||
GoSub Refresh
|
||||
@ -1877,4 +1864,3 @@ ColorRemRiTable:
|
||||
|
||||
return
|
||||
|
||||
|
||||
|
@ -1099,7 +1099,7 @@ SignSupVer:
|
||||
************************************************************************
|
||||
WMOKey = Get_Property(@WINDOW,'ID')
|
||||
PSNo = Get_Property(@WINDOW:'.PS_NO)','TEXT')
|
||||
VerInst = XLATE('PRS_STAGE',PSNo:'*QA',PRS_STAGE_INST$,'X')
|
||||
VerInst = XLATE('PRS_STAGE',PSNo:'*MO_QA',PRS_STAGE_INST$,'X')
|
||||
IF (VerInst NE '') THEN
|
||||
Yes = Dialog_Box( 'RDS_VER', @WINDOW, VerInst )
|
||||
IF NOT(Yes) THEN
|
||||
@ -1107,29 +1107,25 @@ SignSupVer:
|
||||
END
|
||||
END
|
||||
|
||||
WCCheckEnabled = Xlate('APP_INFO', 'WAFER_COUNTER_CHECK', '', 'X')
|
||||
If WCCheckEnabled then
|
||||
****************************************
|
||||
* Verify the Wafer Counter information *
|
||||
****************************************
|
||||
|
||||
****************************************
|
||||
* Verify the Wafer Counter information *
|
||||
****************************************
|
||||
WafersOut = Get_Property(@WINDOW:'.WAFER_CNT','TEXT')
|
||||
WaferCounterQty = Get_Property(@WINDOW:'.EDL_WAFER_COUNTER_QTY','DEFPROP')
|
||||
|
||||
WafersOut = Get_Property(@WINDOW:'.WAFER_CNT','TEXT')
|
||||
WaferCounterQty = Get_Property(@WINDOW:'.EDL_WAFER_COUNTER_QTY','DEFPROP')
|
||||
|
||||
************************************
|
||||
* Wafer Counter - Quantity Section *
|
||||
************************************
|
||||
If (WaferCounterQty NE '') then
|
||||
If (WaferCounterQty NE WafersOut) then
|
||||
ErrMsg('Unable to sign FQA because Wafer Counter and Wafers Filled quantities do not match.')
|
||||
RETURN 0
|
||||
end
|
||||
end else
|
||||
ErrMsg('Unable to sign FQA because the Wafer Counter quantity is missing.')
|
||||
RETURN 0
|
||||
end
|
||||
end
|
||||
************************************
|
||||
* Wafer Counter - Quantity Section *
|
||||
************************************
|
||||
If (WaferCounterQty NE '') then
|
||||
If (WaferCounterQty NE WafersOut) then
|
||||
ErrMsg('Unable to sign FQA because Wafer Counter and Wafers Filled quantities do not match.')
|
||||
RETURN 0
|
||||
end
|
||||
end else
|
||||
ErrMsg('Unable to sign FQA because the Wafer Counter quantity is missing.')
|
||||
RETURN 0
|
||||
end
|
||||
|
||||
**************************
|
||||
* Verify user's password *
|
||||
@ -1711,129 +1707,142 @@ AddMakeup:
|
||||
END
|
||||
NEXT I
|
||||
|
||||
Response = Dialog_Box('NDW_MAKEUP_WAFERS', @Window, WOMatKey)
|
||||
Continue = True$
|
||||
ShowSpecInst = Xlate('PROD_SPEC', PSNo, PROD_SPEC_SHOW_SPEC_INST_ON_MU_ADD$, 'X')
|
||||
If ShowSpecInst then
|
||||
SpecInst = Xlate('PROD_SPEC', PSNo, PROD_SPEC_SPEC_INST$, 'X')
|
||||
If SpecInst NE '' then
|
||||
Continue = Dialog_Box('NDW_ACKNOWLEDGE_MESSAGE', @Window, SpecInst)
|
||||
If Not(Continue) then
|
||||
Msg(@Window, '', 'OK', '', 'Process Error':@FM:'This PSN requires you to acknowledge special instructions to add makeup wafers.')
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Begin Case
|
||||
Case Response EQ True$
|
||||
// User requested to convert the current cassette into a makeup box.
|
||||
WOMatRec = Database_Services('ReadDataRow', 'WO_MAT', WOMatKey)
|
||||
If Error_Services('NoError') then
|
||||
SAPBatchNo = WOMatRec<WO_MAT_SAP_BATCH_NO$>
|
||||
SAPTXDtm = WOMatRec<WO_MAT_SAP_TX_DTM$>
|
||||
AwaitingBatchNo = ( (SAPTXDtm NE '') and (SAPBatchNo EQ '') )
|
||||
HasBatchNo = (SAPBatchNo NE '')
|
||||
FullBoxReject = (SAPBatchNo[-1, 1] = 'R')
|
||||
Begin Case
|
||||
Case AwaitingBatchNo
|
||||
InvalidRequest = True$
|
||||
ErrMsg('WARNING: Cassette ineligible to be converted as it is awaiting a batch number from SAP.')
|
||||
Return
|
||||
Case FullBoxReject
|
||||
InvalidRequest = True$
|
||||
ErrMsg('WARNING: Cassette is ineligible to be converted as it is a full box reject.')
|
||||
Return
|
||||
Case HasBatchNo
|
||||
// Operation limited to LEAD and SUPERVISOR groups
|
||||
OverrideMsg = "Cassette has a batch number. SUPERVISOR or LEAD must override."
|
||||
Response = Msg(@Window, '', 'OVERRIDE', '', OverrideMsg)
|
||||
|
||||
Begin Case
|
||||
Case Response EQ 1
|
||||
Response = True$ ; // User Clicked Override
|
||||
Case Response EQ 2
|
||||
Response = False$ ; // User Clicked Cancel
|
||||
Case Response EQ char(27)
|
||||
Response = False$ ; // User Pressed Escape Key
|
||||
End Case
|
||||
|
||||
If Response EQ True$ then
|
||||
Response = Dialog_Box('NDW_VERIFY_USER', @WINDOW, @USER4:@FM:'LEAD':@VM:'SUPERVISOR')
|
||||
Authorized = Response<1>
|
||||
end else
|
||||
Authorized = False$
|
||||
end
|
||||
If Not(Authorized) then Return
|
||||
Case Otherwise$
|
||||
Null
|
||||
End Case
|
||||
|
||||
AvailMU_WMOKeys = ''
|
||||
UserResp = Response
|
||||
MakeupBox = ''
|
||||
If Continue then
|
||||
Response = Dialog_Box('NDW_MAKEUP_WAFERS', @Window, WOMatKey)
|
||||
|
||||
Begin Case
|
||||
Case Response EQ True$
|
||||
// User requested to convert the current cassette into a makeup box.
|
||||
// Verify the quantity before proceeding.
|
||||
If WMOutKey NE '' then
|
||||
Parms = ''
|
||||
Parms<1> = WMOutKey ; // Cassette to verify wafer count of.
|
||||
Parms<2> = 0 ; // Wafer count adjustment - 0 because converting box.
|
||||
Parms<3> = 'MU' ; // Wafer counter tool location
|
||||
Proceed = Dialog_Box('NDW_WAFER_COUNTER', @Window, Parms)
|
||||
If Proceed NE True$ then Return
|
||||
WOMatRec = Database_Services('ReadDataRow', 'WO_MAT', WOMatKey)
|
||||
If Error_Services('NoError') then
|
||||
SAPBatchNo = WOMatRec<WO_MAT_SAP_BATCH_NO$>
|
||||
SAPTXDtm = WOMatRec<WO_MAT_SAP_TX_DTM$>
|
||||
AwaitingBatchNo = ( (SAPTXDtm NE '') and (SAPBatchNo EQ '') )
|
||||
HasBatchNo = (SAPBatchNo NE '')
|
||||
FullBoxReject = (SAPBatchNo[-1, 1] = 'R')
|
||||
Begin Case
|
||||
Case AwaitingBatchNo
|
||||
InvalidRequest = True$
|
||||
ErrMsg('WARNING: Cassette ineligible to be converted as it is awaiting a batch number from SAP.')
|
||||
Return
|
||||
Case FullBoxReject
|
||||
InvalidRequest = True$
|
||||
ErrMsg('WARNING: Cassette is ineligible to be converted as it is a full box reject.')
|
||||
Return
|
||||
Case HasBatchNo
|
||||
// Operation limited to LEAD and SUPERVISOR groups
|
||||
OverrideMsg = "Cassette has a batch number. SUPERVISOR or LEAD must override."
|
||||
Response = Msg(@Window, '', 'OVERRIDE', '', OverrideMsg)
|
||||
|
||||
Begin Case
|
||||
Case Response EQ 1
|
||||
Response = True$ ; // User Clicked Override
|
||||
Case Response EQ 2
|
||||
Response = False$ ; // User Clicked Cancel
|
||||
Case Response EQ char(27)
|
||||
Response = False$ ; // User Pressed Escape Key
|
||||
End Case
|
||||
|
||||
If Response EQ True$ then
|
||||
Response = Dialog_Box('NDW_VERIFY_USER', @WINDOW, @USER4:@FM:'LEAD':@VM:'SUPERVISOR')
|
||||
Authorized = Response<1>
|
||||
end else
|
||||
Authorized = False$
|
||||
end
|
||||
If Not(Authorized) then Return
|
||||
Case Otherwise$
|
||||
Null
|
||||
End Case
|
||||
|
||||
AvailMU_WMOKeys = ''
|
||||
UserResp = Response
|
||||
MakeupBox = ''
|
||||
|
||||
// User requested to convert the current cassette into a makeup box.
|
||||
// Verify the quantity before proceeding.
|
||||
If WMOutKey NE '' then
|
||||
Parms = ''
|
||||
Parms<1> = WMOutKey ; // Cassette to verify wafer count of.
|
||||
Parms<2> = 0 ; // Wafer count adjustment - 0 because converting box.
|
||||
Parms<3> = 'MU' ; // Wafer counter tool location
|
||||
Proceed = Dialog_Box('NDW_WAFER_COUNTER', @Window, Parms)
|
||||
If Proceed NE True$ then Return
|
||||
end else
|
||||
ErrMsg('Error starting wafer counter check. WM_OUT key is missing.')
|
||||
end
|
||||
|
||||
CheckValue = 1
|
||||
|
||||
FieldNo = WO_MAT_EPO_MAKEUP_BOX$
|
||||
obj_WO_Mat('ChangeFlag',WOMatKey:@RM:FieldNo:@RM:CheckValue) ;* Set WMO_MAKEUP flag on WM_OUT
|
||||
IF Get_Status(errCode) THEN ErrMsg(errCode)
|
||||
|
||||
Set_Property(@WINDOW:'.MAKEUP_BOX','DEFPROP',CheckValue) ;* Make this the makeup box
|
||||
Send_Event(@WINDOW,'WRITE') ;* Write the record
|
||||
|
||||
WMOKey = WONo:'*':ProcStepNo:'*':CassNo
|
||||
obj_AppWindow('LoadFormKeys',@WINDOW:@RM:WMOKey) ;* Reread the updated record
|
||||
|
||||
Return
|
||||
end else
|
||||
ErrMsg('Error starting wafer counter check. WM_OUT key is missing.')
|
||||
ErrMsg('WARNING: Error reading WO_MAT record.')
|
||||
Return
|
||||
end
|
||||
Case Response EQ ''
|
||||
// User has cancelled this process.
|
||||
Return
|
||||
Case Otherwise$
|
||||
// User has selected a makeup box to use and backfill.
|
||||
AvailMU_WMOKeys = Response
|
||||
MakeupBox = Response
|
||||
MuWfrsNeeded = SelCnt
|
||||
If AvailMU_WMOKeys NE '' then
|
||||
// Wafer counter check - Account for the possibility of selecting more than one makeup box.
|
||||
For each MuWmoKey in AvailMU_WMOKeys using @FM
|
||||
MuWoMatKey = Field(MuWmoKey, '*', 1):'*':Field(MuWmoKey, '*', 3)
|
||||
QtyAdj = MuWfrsNeeded
|
||||
CurrMuWfrCnt = obj_WO_Mat('CurrWaferCnt', MuWoMatKey)
|
||||
If MuWfrsNeeded GT CurrMuWfrCnt then
|
||||
QtyAdj = CurrMuWfrCnt
|
||||
MuWfrsNeeded -= CurrMuWfrCnt
|
||||
end
|
||||
Parms = ''
|
||||
Parms<1> = MuWmoKey ; // Cassette to verify wafer count of.
|
||||
Parms<2> = QtyAdj ; // Wafer count adjustment - 0 because converting box.
|
||||
Parms<3> = 'MU' ; // Wafer counter tool location
|
||||
Proceed = Dialog_Box('NDW_WAFER_COUNTER', @Window, Parms)
|
||||
If Proceed NE True$ then Return
|
||||
Next MuWmoKey
|
||||
end
|
||||
|
||||
CheckValue = 1
|
||||
* Signature block added 10/6/2010 JCH *
|
||||
Valid = Dialog_Box('NDW_VERIFY_USER', @Window, @User4)
|
||||
|
||||
FieldNo = WO_MAT_EPO_MAKEUP_BOX$
|
||||
obj_WO_Mat('ChangeFlag',WOMatKey:@RM:FieldNo:@RM:CheckValue) ;* Set WMO_MAKEUP flag on WM_OUT
|
||||
IF Get_Status(errCode) THEN ErrMsg(errCode)
|
||||
IF NOT(Valid) THEN RETURN ;* User is not worthy or can't type
|
||||
|
||||
Set_Property(@WINDOW:'.MAKEUP_BOX','DEFPROP',CheckValue) ;* Make this the makeup box
|
||||
Send_Event(@WINDOW,'WRITE') ;* Write the record
|
||||
Send_Event(@WINDOW,'WRITE')
|
||||
|
||||
WMOKey = WONo:'*':ProcStepNo:'*':CassNo
|
||||
obj_AppWindow('LoadFormKeys',@WINDOW:@RM:WMOKey) ;* Reread the updated record
|
||||
|
||||
Return
|
||||
end else
|
||||
ErrMsg('WARNING: Error reading WO_MAT record.')
|
||||
Return
|
||||
end
|
||||
Case Response EQ ''
|
||||
// User has cancelled this process.
|
||||
Return
|
||||
Case Otherwise$
|
||||
// User has selected a makeup box to use and backfill.
|
||||
AvailMU_WMOKeys = Response
|
||||
MakeupBox = Response
|
||||
MuWfrsNeeded = SelCnt
|
||||
If AvailMU_WMOKeys NE '' then
|
||||
// Wafer counter check - Account for the possibility of selecting more than one makeup box.
|
||||
For each MuWmoKey in AvailMU_WMOKeys using @FM
|
||||
MuWoMatKey = Field(MuWmoKey, '*', 1):'*':Field(MuWmoKey, '*', 3)
|
||||
QtyAdj = MuWfrsNeeded
|
||||
CurrMuWfrCnt = obj_WO_Mat('CurrWaferCnt', MuWoMatKey)
|
||||
If MuWfrsNeeded GT CurrMuWfrCnt then
|
||||
QtyAdj = CurrMuWfrCnt
|
||||
MuWfrsNeeded -= CurrMuWfrCnt
|
||||
end
|
||||
Parms = ''
|
||||
Parms<1> = MuWmoKey ; // Cassette to verify wafer count of.
|
||||
Parms<2> = QtyAdj ; // Wafer count adjustment - 0 because converting box.
|
||||
Parms<3> = 'MU' ; // Wafer counter tool location
|
||||
Proceed = Dialog_Box('NDW_WAFER_COUNTER', @Window, Parms)
|
||||
If Proceed NE True$ then Return
|
||||
Next MuWmoKey
|
||||
end
|
||||
|
||||
* Signature block added 10/6/2010 JCH *
|
||||
Valid = Dialog_Box('NDW_VERIFY_USER', @Window, @User4)
|
||||
|
||||
IF NOT(Valid) THEN RETURN ;* User is not worthy or can't type
|
||||
|
||||
Send_Event(@WINDOW,'WRITE')
|
||||
|
||||
obj_WM_Out('AddMakeupWafers',WMOutKey:@RM:EmptySlots:@RM:MakeupBox)
|
||||
//Remove the signatures for the WO_MAT_QA record because they are changing its results.
|
||||
WOMatQaKey = Field(WMOutKey, '*', 1) : '*' : Field(WMOutKey, '*', 3)
|
||||
Wo_Mat_Qa_Services('ClearSignatureByStage', WOMatQaKey, 'MO_QA')
|
||||
obj_Appwindow('LoadFormKeys',@WINDOW:@RM:WMOutKey)
|
||||
|
||||
RETURN
|
||||
End Case
|
||||
obj_WM_Out('AddMakeupWafers',WMOutKey:@RM:EmptySlots:@RM:MakeupBox)
|
||||
//Remove the signatures for the WO_MAT_QA record because they are changing its results.
|
||||
WOMatQaKey = Field(WMOutKey, '*', 1) : '*' : Field(WMOutKey, '*', 3)
|
||||
Wo_Mat_Qa_Services('ClearSignatureByStage', WOMatQaKey, 'MO_QA')
|
||||
obj_Appwindow('LoadFormKeys',@WINDOW:@RM:WMOutKey)
|
||||
|
||||
RETURN
|
||||
End Case
|
||||
end
|
||||
end else
|
||||
// Cassette is on hold so makeup wafers cannot be added.
|
||||
ErrorMessage = 'Add MU Wafer Denied!. The cassette must be taken off hold before adding makeup wafers.'
|
||||
@ -2281,57 +2290,49 @@ return
|
||||
|
||||
RefreshWaferCounterData:
|
||||
|
||||
WCCheckEnabled = Xlate('APP_INFO', 'WAFER_COUNTER_CHECK', '', 'X')
|
||||
If WCCheckEnabled then
|
||||
Set_Property(@Window:'.LBL_WAFER_COUNTER_QTY', 'VISIBLE', True$)
|
||||
Set_Property(@Window:'.EDL_WAFER_COUNTER_QTY', 'VISIBLE', True$)
|
||||
QtyBackColor = GREEN$
|
||||
WONo = Get_Property(@Window : '.WO_NO', 'TEXT')
|
||||
Cassette = Get_Property(@Window : '.OUT_CASS_NO', 'TEXT')
|
||||
WMOKey = WONo:'*1*':Cassette
|
||||
If WMOKey NE '*1*' then
|
||||
FqaWcRec = Wafer_Counter_Services('GetLastScan', WMOKey, 'QA')
|
||||
WaferCounterQty = FqaWcRec<WAFER_COUNTER.SCAN_QTY$>
|
||||
Set_Property(@Window, '@ORIG_WFR_CTR_QTY', WaferCounterQty)
|
||||
WafersFilled = Get_Property(@WINDOW:'.WAFER_CNT','TEXT')
|
||||
Set_Property(@WINDOW:'.EDL_WAFER_COUNTER_QTY','DEFPROP', WaferCounterQty)
|
||||
|
||||
Set_Property(@Window:'.LBL_WAFER_COUNTER_QTY', 'VISIBLE', True$)
|
||||
Set_Property(@Window:'.EDL_WAFER_COUNTER_QTY', 'VISIBLE', True$)
|
||||
QtyBackColor = GREEN$
|
||||
WONo = Get_Property(@Window : '.WO_NO', 'TEXT')
|
||||
Cassette = Get_Property(@Window : '.OUT_CASS_NO', 'TEXT')
|
||||
WMOKey = WONo:'*1*':Cassette
|
||||
If WMOKey NE '*1*' then
|
||||
FqaWcRec = Wafer_Counter_Services('GetLastScan', WMOKey, 'QA')
|
||||
WaferCounterQty = FqaWcRec<WAFER_COUNTER.SCAN_QTY$>
|
||||
Set_Property(@Window, '@ORIG_WFR_CTR_QTY', WaferCounterQty)
|
||||
WafersFilled = Get_Property(@WINDOW:'.WAFER_CNT','TEXT')
|
||||
Set_Property(@WINDOW:'.EDL_WAFER_COUNTER_QTY','DEFPROP', WaferCounterQty)
|
||||
|
||||
************************************
|
||||
* Wafer Counter - Quantity Section *
|
||||
************************************
|
||||
If (WaferCounterQty NE '') then
|
||||
If (WaferCounterQty NE WafersFilled) then QtyBackColor = RED$
|
||||
end else
|
||||
QtyBackColor = ORANGE$
|
||||
end
|
||||
WaferSize = Xlate('WM_OUT', WMOKey, 'WAFER_SIZE', 'X')
|
||||
WaferSize = Field(WaferSize, ' ', 3, 1)
|
||||
If ( (WaferSize EQ 6) or (WaferSize EQ 8) ) then
|
||||
WCToolId = Wafer_Counter_Services('GetWaferCounterToolID', WaferSize:'INCH', 'QA')
|
||||
If Error_Services('NoError') then
|
||||
WCCurrMode = ''
|
||||
If RowExists('TOOL', WCToolID) then
|
||||
WCCurrModeKey = Xlate('TOOL', WCToolID, 'CURR_MODE_KEY', 'X')
|
||||
WCCurrMode = Xlate('TOOL_LOG', WCCurrModeKey, 'TOOL_MODE', 'X')
|
||||
Set_Property(@WINDOW:'.EDL_WAFER_COUNTER_QTY', 'ENABLED', (WCCurrMode NE 'PROD'))
|
||||
end else
|
||||
ErrMsg('Verify wafer count error. Invalid wafer counter tool ID "':WCToolID:'".')
|
||||
end
|
||||
************************************
|
||||
* Wafer Counter - Quantity Section *
|
||||
************************************
|
||||
If (WaferCounterQty NE '') then
|
||||
If (WaferCounterQty NE WafersFilled) then QtyBackColor = RED$
|
||||
end else
|
||||
QtyBackColor = ORANGE$
|
||||
end
|
||||
WaferSize = Xlate('WM_OUT', WMOKey, 'WAFER_SIZE', 'X')
|
||||
WaferSize = Field(WaferSize, ' ', 3, 1)
|
||||
If ( (WaferSize EQ 6) or (WaferSize EQ 8) ) then
|
||||
WCToolId = Wafer_Counter_Services('GetWaferCounterToolID', WaferSize:'INCH', 'QA')
|
||||
If Error_Services('NoError') then
|
||||
WCCurrMode = ''
|
||||
If RowExists('TOOL', WCToolID) then
|
||||
WCCurrModeKey = Xlate('TOOL', WCToolID, 'CURR_MODE_KEY', 'X')
|
||||
WCCurrMode = Xlate('TOOL_LOG', WCCurrModeKey, 'TOOL_MODE', 'X')
|
||||
Set_Property(@WINDOW:'.EDL_WAFER_COUNTER_QTY', 'ENABLED', (WCCurrMode NE 'PROD'))
|
||||
end else
|
||||
ErrMsg(Error_Services('GetMessage'))
|
||||
ErrMsg('Verify wafer count error. Invalid wafer counter tool ID "':WCToolID:'".')
|
||||
end
|
||||
end else
|
||||
ErrMsg('Verify wafer count error. Invalid wafer size "':WaferSize:'" returned for WMO "':WMOKey:'".')
|
||||
ErrMsg(Error_Services('GetMessage'))
|
||||
end
|
||||
end
|
||||
end else
|
||||
ErrMsg('Verify wafer count error. Invalid wafer size "':WaferSize:'" returned for WMO "':WMOKey:'".')
|
||||
end
|
||||
end
|
||||
|
||||
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
|
||||
Set_Property(@WINDOW:'.EDL_WAFER_COUNTER_QTY','BACKCOLOR', QtyBackColor)
|
||||
|
||||
return
|
||||
|
||||
|
@ -881,24 +881,19 @@ Event SIGN_BUTTON.CLICK()
|
||||
******************************************
|
||||
* Verify Unload Stage QA Metrology Tests *
|
||||
******************************************
|
||||
|
||||
DevelopmentFlag = Xlate('DEVELOPMENT', 'HGCV', 'STATUS', 'X')
|
||||
|
||||
If (DevelopmentFlag EQ True$) then
|
||||
WOMatQAKey = WONo : '*' : CassNo
|
||||
WOMatQARec = Database_Services('ReadDataRow', 'WO_MAT_QA', WOMatQAKey)
|
||||
OutOfSpec = WOMatQARec<WO_MAT_QA_OUT_OF_SPEC$>
|
||||
OutOfSpec = Sum(OutOfSpec)
|
||||
If OutOfSpec GT 0 then
|
||||
FailReasons = WOMatQARec<WO_MAT_QA_FAIL_REASON$>
|
||||
ErrorMsg = 'Process Error':@SVM
|
||||
For each FailReason in FailReasons using @VM
|
||||
ErrorMsg := FailReason:CRLF$
|
||||
Next FailReason
|
||||
ErrMsg(ErrorMsg)
|
||||
Return
|
||||
end
|
||||
end
|
||||
WOMatQAKey = WONo : '*' : CassNo
|
||||
WOMatQARec = Database_Services('ReadDataRow', 'WO_MAT_QA', WOMatQAKey)
|
||||
OutOfSpec = WOMatQARec<WO_MAT_QA_OUT_OF_SPEC$>
|
||||
OutOfSpec = Sum(OutOfSpec)
|
||||
If OutOfSpec GT 0 then
|
||||
FailReasons = WOMatQARec<WO_MAT_QA_FAIL_REASON$>
|
||||
ErrorMsg = 'Process Error':@SVM
|
||||
For each FailReason in FailReasons using @VM
|
||||
ErrorMsg := FailReason:CRLF$
|
||||
Next FailReason
|
||||
ErrMsg(ErrorMsg)
|
||||
Return
|
||||
end
|
||||
|
||||
*******************************************
|
||||
* Verify if all steps have been completed *
|
||||
@ -1965,7 +1960,3 @@ ClearForm:
|
||||
|
||||
return
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -440,7 +440,7 @@ END
|
||||
IF CurrStatus NE '' THEN
|
||||
SWAP @VM WITH '" "' IN CurrStatus
|
||||
IF SelectSent NE '' THEN SelectSent := ' AND'
|
||||
SelectSent := ' WITH CURR_STATUS ':QUOTE(CurrStatus)
|
||||
SelectSent := ' WITH CURR_STATUS_STATIC ':QUOTE(CurrStatus)
|
||||
END
|
||||
|
||||
IF PartTypes NE '' THEN
|
||||
@ -471,7 +471,7 @@ SelectSent = 'SELECT REACT_ITEM ':SelectSent
|
||||
|
||||
|
||||
Def = ""
|
||||
Def<MTEXT$> = "Selecting Reactor Events..."
|
||||
Def<MTEXT$> = "Selecting Reactor Items..."
|
||||
Def<MTYPE$> = "U"
|
||||
|
||||
* display the processing message and do the processing
|
||||
@ -502,6 +502,3 @@ End_Dialog(@WINDOW,RINos)
|
||||
|
||||
RETURN
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -259,7 +259,7 @@ end service
|
||||
//----------------------------------------------------------------------------------------------------------------------
|
||||
Service GetWaferMapProductionPath()
|
||||
|
||||
ProductionPath = '\\mesfs.infineon.com\EC_Metrology_Si\MetrologyAttachments\TencorRunData'
|
||||
ProductionPath = '\\mesfs.infineon.com\EC_Metrology_Si\MetrologyAttachments\TencorRunData_'
|
||||
Response = ProductionPath
|
||||
|
||||
end service
|
||||
|
@ -2,9 +2,9 @@ Compile function Lot_Services(@Service, @Params)
|
||||
#pragma precomp SRP_PreCompiler
|
||||
|
||||
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
|
||||
Declare function SRP_Array, SRP_Json, Environment_Services, Logging_Services, MemberOf, Lot_Event_Services, GetTickCount
|
||||
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
|
||||
Declare subroutine SRP_Run_Command, Service_Services, obj_notes, Lot_Event_Services, Mona_Services
|
||||
$insert APP_INSERTS
|
||||
$Insert LOT_EQUATES
|
||||
$Insert TEST_WAFER_PROD_EQUATES
|
||||
@ -38,6 +38,13 @@ 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 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
|
||||
|
||||
Return Response or ""
|
||||
@ -113,6 +120,9 @@ Service GenerateNewLotId(LotType)
|
||||
end service
|
||||
|
||||
Service GetLotIdByLegacyLotIdAndType(LegacyLotId, LegacyLotType)
|
||||
StartTick = GetTickCount()
|
||||
MetricName = 'GetLotIdByLegacyLotIdAndType'
|
||||
|
||||
Open 'DICT.LOT' to DictLot then
|
||||
|
||||
SearchString = ''
|
||||
@ -130,10 +140,16 @@ Service GetLotIdByLegacyLotIdAndType(LegacyLotId, LegacyLotType)
|
||||
end else
|
||||
ErrorMsg = 'Error in ':Service:' service. Error opening LOT dictionary.'
|
||||
end
|
||||
|
||||
EndTick = GetTickCount()
|
||||
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
|
||||
end service
|
||||
|
||||
|
||||
Service CreateNewLot(LotType, ProdName, LotQty, VendorPartNo, VendorLotNo, VendorCode, Username, PrinterID, LotId)
|
||||
StartTick = GetTickCount()
|
||||
MetricName = 'CreateNewLot'
|
||||
|
||||
CreatedLotNumber = ''
|
||||
ErrorMessage = ''
|
||||
Begin Case
|
||||
@ -279,6 +295,8 @@ Service CreateNewLot(LotType, ProdName, LotQty, VendorPartNo, VendorLotNo, Vendo
|
||||
end
|
||||
Response = CreatedLotNumber
|
||||
|
||||
EndTick = GetTickCount()
|
||||
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
|
||||
End Service
|
||||
|
||||
|
||||
@ -484,6 +502,9 @@ end service
|
||||
|
||||
//Returns a @FM delimited list of operations in sequence
|
||||
Service GetLotOperationSequence(LotId)
|
||||
StartTick = GetTickCount()
|
||||
MetricName = 'GetLotOperationSequence'
|
||||
|
||||
LotOperationsInSequence = ''
|
||||
If LotID NE '' then
|
||||
//Get Operations
|
||||
@ -496,9 +517,15 @@ Service GetLotOperationSequence(LotId)
|
||||
//error: lot id was null
|
||||
end
|
||||
Response = LotOperationsInSequence
|
||||
|
||||
EndTick = GetTickCount()
|
||||
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
|
||||
end service
|
||||
|
||||
Service GetLotCurrOperationId(LotId)
|
||||
StartTick = GetTickCount()
|
||||
MetricName = 'GetLotCurrOperationId'
|
||||
|
||||
CurrOperation = ''
|
||||
If LotID NE '' then
|
||||
//Get them in sequence first
|
||||
@ -515,9 +542,15 @@ Service GetLotCurrOperationId(LotId)
|
||||
//error: lot id was null
|
||||
end
|
||||
Response = CurrOperation
|
||||
|
||||
EndTick = GetTickCount()
|
||||
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
|
||||
end service
|
||||
|
||||
Service GetLotCurrOperationName(LotId)
|
||||
StartTick = GetTickCount()
|
||||
MetricName = 'GetLotCurrOperationName'
|
||||
|
||||
CurrOperationId = ''
|
||||
CurrOperationName = ''
|
||||
If LotID NE '' then
|
||||
@ -536,6 +569,9 @@ Service GetLotCurrOperationName(LotId)
|
||||
//error: lot id was null
|
||||
end
|
||||
Response = CurrOperationName
|
||||
|
||||
EndTick = GetTickCount()
|
||||
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
|
||||
end service
|
||||
|
||||
Service AddLotOperationIntoSequence(LotId, NewOperationId, NewSequence, Rework)
|
||||
@ -591,6 +627,9 @@ Service AddLotOperationIntoSequence(LotId, NewOperationId, NewSequence, Rework)
|
||||
end service
|
||||
|
||||
Service IsLotMovedIn(LotId)
|
||||
StartTick = GetTickCount()
|
||||
MetricName = 'IsLotMovedIn'
|
||||
|
||||
Response = ''
|
||||
If RowExists('LOT', LotId) then
|
||||
CurrOperId = Lot_Services('GetLotCurrOperationId', LotId)
|
||||
@ -601,6 +640,9 @@ Service IsLotMovedIn(LotId)
|
||||
Response = False$
|
||||
end
|
||||
end
|
||||
|
||||
EndTick = GetTickCount()
|
||||
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
|
||||
end service
|
||||
|
||||
Service IsOperationCompleted(LotOperationId)
|
||||
@ -619,6 +661,8 @@ Service IsOperationCompleted(LotOperationId)
|
||||
end service
|
||||
|
||||
Service MoveInLot(LotID, Operator)
|
||||
StartTick = GetTickCount()
|
||||
MetricName = 'MoveInLot'
|
||||
|
||||
ErrorMessage = ''
|
||||
ThisLotCurrOperationID = ''
|
||||
@ -667,9 +711,15 @@ Service MoveInLot(LotID, Operator)
|
||||
Logging_Services('AppendLog', objLotMoveLog, LogData, @RM, @FM, False$)
|
||||
Error_Services('Add', ErrorMessage)
|
||||
end
|
||||
|
||||
EndTick = GetTickCount()
|
||||
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
|
||||
end service
|
||||
|
||||
Service MoveOutLot(LotID, Operator)
|
||||
StartTick = GetTickCount()
|
||||
MetricName = 'MoveOutLot'
|
||||
|
||||
ErrorMessage = ''
|
||||
ThisLotCurrOperationID = ''
|
||||
If LotId NE '' then
|
||||
@ -729,6 +779,9 @@ Service MoveOutLot(LotID, Operator)
|
||||
Logging_Services('AppendLog', objLotMoveLog, LogData, @RM, @FM, False$)
|
||||
Error_Services('Add', ErrorMessage)
|
||||
end
|
||||
|
||||
EndTick = GetTickCount()
|
||||
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
|
||||
end service
|
||||
|
||||
Service ConvertLotRecordToJson(LotId, ItemURL, CurrUser, FullObject=BOOLEAN)
|
||||
@ -855,6 +908,9 @@ Service ConvertLotRecordToJson(LotId, ItemURL, CurrUser, FullObject=BOOLEAN)
|
||||
end service
|
||||
|
||||
Service OpenLot(LotId)
|
||||
StartTick = GetTickCount()
|
||||
MetricName = 'OpenLot'
|
||||
|
||||
ErrorMessage = ''
|
||||
If RowExists('LOT', LotId) then
|
||||
LotRec = Database_Services('ReadDataRow', 'LOT', LotId, True$, 0, False$)
|
||||
@ -871,9 +927,15 @@ Service OpenLot(LotId)
|
||||
If ErrorMessage NE '' then
|
||||
Error_Services('Add', ErrorMessage)
|
||||
end
|
||||
|
||||
EndTick = GetTickCount()
|
||||
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
|
||||
end service
|
||||
|
||||
Service CloseLot(LotId)
|
||||
StartTick = GetTickCount()
|
||||
MetricName = 'CloseLot'
|
||||
|
||||
ErrorMessage = ''
|
||||
If RowExists('LOT', LotId) then
|
||||
LotRec = Database_Services('ReadDataRow', 'LOT', LotId, True$, 0, False$)
|
||||
@ -890,6 +952,9 @@ Service CloseLot(LotId)
|
||||
If ErrorMessage NE '' then
|
||||
Error_Services('Add', ErrorMessage)
|
||||
end
|
||||
|
||||
EndTick = GetTickCount()
|
||||
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
|
||||
end service
|
||||
|
||||
Service AutoCloseTestWaferLot(LotId, CloseUserId)
|
||||
@ -989,15 +1054,26 @@ Service AutoCloseTestWaferLot(LotId, CloseUserId)
|
||||
end service
|
||||
|
||||
Service HoldLot(LotId, OperatorId)
|
||||
StartTick = GetTickCount()
|
||||
MetricName = 'HoldLot'
|
||||
|
||||
EndTick = GetTickCount()
|
||||
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
|
||||
end service
|
||||
|
||||
Service UnholdLot(LotId, OperatorId)
|
||||
StartTick = GetTickCount()
|
||||
MetricName = 'UnholdLot'
|
||||
|
||||
EndTick = GetTickCount()
|
||||
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
|
||||
end service
|
||||
|
||||
|
||||
Service ReduceLotWaferCount(LotId, ReductionQty, OperatorId)
|
||||
StartTick = GetTickCount()
|
||||
MetricName = 'ReduceLotWaferCount'
|
||||
|
||||
ErrorMessage = ''
|
||||
If RowExists('LOT', LotId) then
|
||||
LotRec = Database_Services('ReadDataRow', 'LOT', LotId, True$, 0, False$)
|
||||
@ -1043,9 +1119,15 @@ Service ReduceLotWaferCount(LotId, ReductionQty, OperatorId)
|
||||
if ErrorMessage NE '' then
|
||||
Error_Services('Add', ErrorMessage)
|
||||
end
|
||||
|
||||
EndTick = GetTickCount()
|
||||
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
|
||||
end service
|
||||
|
||||
Service IncreaseLotWaferCount(LotId, IncreaseQty, OperatorId)
|
||||
StartTick = GetTickCount()
|
||||
MetricName = 'IncreaseLotWaferCount'
|
||||
|
||||
ErrorMessage = ''
|
||||
If RowExists('LOT', LotId) then
|
||||
LotRec = Database_Services('ReadDataRow', 'LOT', LotId, True$, 0, False$)
|
||||
@ -1087,6 +1169,8 @@ Service IncreaseLotWaferCount(LotId, IncreaseQty, OperatorId)
|
||||
Error_Services('Add', ErrorMessage)
|
||||
end
|
||||
|
||||
EndTick = GetTickCount()
|
||||
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
|
||||
end service
|
||||
|
||||
Service OpenOIWizardCreateTWLotInBrowser()
|
||||
@ -1095,6 +1179,9 @@ Service OpenOIWizardCreateTWLotInBrowser()
|
||||
end service
|
||||
|
||||
Service CreateNewVoidedLotRecord(LotId, LegacyLotId, LotType=LOT_TYPES, Username)
|
||||
StartTick = GetTickCount()
|
||||
MetricName = 'CreateNewVoidedLotRecord'
|
||||
|
||||
ErrorMessage = ''
|
||||
If RowExists('LSL_USERS', Username) then
|
||||
If LotType NE '' then
|
||||
@ -1165,15 +1252,8 @@ Service CreateNewVoidedLotRecord(LotId, LegacyLotId, LotType=LOT_TYPES, Username
|
||||
If ErrorMessage NE '' then
|
||||
//Todo Log Error Message
|
||||
end
|
||||
|
||||
EndTick = GetTickCount()
|
||||
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
|
||||
end service
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -18,7 +18,7 @@ Parm3:
|
||||
-For Metric updates this represents the numeric data that you wish to send.
|
||||
***************************************************************/
|
||||
|
||||
Declare Subroutine Errmsg, Error_Services, Delay, Mona_Services
|
||||
Declare Subroutine Errmsg, Error_Services, Delay, Mona_Services, Service_Services
|
||||
Declare function Get_Status, SRP_Datetime, Environment_Services, Httpclient_Services
|
||||
#pragma precomp SRP_PreCompiler
|
||||
|
||||
@ -44,17 +44,31 @@ Options STATES = 'OK', 'WARNING', 'CRITICAL'
|
||||
|
||||
Service SendStatus(MonitorName=MONITORS, StatusName, CurrentState=STATES)
|
||||
|
||||
Mona_Services("SendBufferedStatus", MonitorName, StatusName, CurrentState)
|
||||
Mona_Services("PostStatus", MonitorName, StatusName, CurrentState)
|
||||
|
||||
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)
|
||||
|
||||
Mona_Services("SendBufferedAverageMetric", MonitorName, MetricName, Number)
|
||||
Mona_Services("PostAverageMetric", MonitorName, MetricName, Number)
|
||||
|
||||
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)
|
||||
|
||||
@ -172,6 +186,67 @@ Service SendBufferedAverageMetric(MonaResource, MetricName, MetricValue)
|
||||
|
||||
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:
|
||||
|
||||
@ -195,3 +270,4 @@ SwapResourceNames:
|
||||
|
||||
return
|
||||
|
||||
|
||||
|
99
LSL2/STPROC/NDW_ACKNOWLEDGE_MESSAGE_EVENTS.txt
Normal file
99
LSL2/STPROC/NDW_ACKNOWLEDGE_MESSAGE_EVENTS.txt
Normal file
@ -0,0 +1,99 @@
|
||||
Compile function NDW_ACKNOWLEDGE_MESSAGE_EVENTS(CtrlEntId, Event, @PARAMS)
|
||||
/***********************************************************************************************************************
|
||||
|
||||
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 Infineon.
|
||||
|
||||
Name : NDW_ACKNOWLEDGE_MESSAGE_EVENTS
|
||||
|
||||
Description : This function acts as a commuter module for all events related to this window.
|
||||
|
||||
Notes : Commuter Modules are automatically called from the Promoted_Events function which is called by the
|
||||
application-specific promoted event handler. This makes it possible to add QuickEvents that need to
|
||||
execute Basic+ logic without having use the Form Designer to make the association, although this is
|
||||
limited to the events which are currently promoted.
|
||||
|
||||
If the form needs to call the commuter module directly then the QuickEvent parameters should be
|
||||
formatted like this:
|
||||
|
||||
'@SELF','@EVENT',['@PARAM1','@PARAMx']
|
||||
|
||||
Parameters :
|
||||
CtrlEntId [in] -- The fully qualified name of the control calling the promoted event
|
||||
Event [in] -- The event being executed. See the Notes section regarding "PRE" events
|
||||
Param1-15 [in] -- Additional event parameter holders
|
||||
EventFlow [out] -- Set to 1 or 0 so the calling event knows whether or not to chain forward. See comments in
|
||||
EVENT_SETUP insert
|
||||
|
||||
History : (Date, Initials, Notes)
|
||||
05/23/25 djs Created initial commuter module.
|
||||
|
||||
***********************************************************************************************************************/
|
||||
#pragma precomp SRP_PreCompiler
|
||||
#window NDW_ACKNOWLEDGE_MESSAGE
|
||||
|
||||
$Insert APP_INSERTS
|
||||
$Insert EVENT_SETUP
|
||||
|
||||
Declare subroutine PlaceDialog
|
||||
|
||||
SubclassInfo = Form_Services('FindSubclassControl')
|
||||
Subclass = SubclassInfo<1>
|
||||
|
||||
// Update the arguments so that the OpenInsight OLE event will treate the ActiveX event as a native event handler.
|
||||
If Event EQ 'OLE' then
|
||||
Transfer Event to OIEvent
|
||||
Transfer Param1 to Event
|
||||
Transfer Param2 to Param1
|
||||
Transfer Param3 to Param2
|
||||
Transfer Param4 to Param3
|
||||
Transfer Param5 to Param4
|
||||
Transfer Param6 to Param5
|
||||
Transfer Param7 to Param6
|
||||
Transfer Param8 to Param7
|
||||
end
|
||||
|
||||
GoToEvent Event for CtrlEntId else
|
||||
// Event not implemented
|
||||
end
|
||||
|
||||
Return EventFlow or 1
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// EVENT HANDLERS
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
Event WINDOW.CREATE(CreateParam)
|
||||
|
||||
TextToAcknowledge = CreateParam
|
||||
If TextToAcknowledge NE '' then
|
||||
Swap @TM with CRLF$ in TextToAcknowledge
|
||||
Set_Property(@Window:'.EDB_DATA', 'TEXT', TextToAcknowledge)
|
||||
PlaceDialog(-2, -2)
|
||||
end else
|
||||
Post_Event(@Window, 'CLOSE')
|
||||
end
|
||||
|
||||
End Event
|
||||
|
||||
|
||||
Event WINDOW.CLOSE(CancelFlag, CloseFlags)
|
||||
|
||||
End_Dialog(@Window, False$)
|
||||
|
||||
end event
|
||||
|
||||
|
||||
Event PUB_OK.CLICK()
|
||||
|
||||
End_Dialog(@Window, True$)
|
||||
|
||||
end event
|
||||
|
||||
|
||||
Event PUB_CANCEL.CLICK()
|
||||
|
||||
End_Dialog(@Window, False$)
|
||||
|
||||
end event
|
||||
|
@ -3,7 +3,7 @@ Compile function NDW_ADJUST_LOT_QTY_EVENTS(CtrlEntId, Event, @PARAMS)
|
||||
#window NDW_ADJUST_LOT_QTY
|
||||
|
||||
Declare function MemberOf, Database_Services, Error_Services, Datetime
|
||||
Declare subroutine PlaceDialog, Database_Services, Lot_Services
|
||||
Declare subroutine PlaceDialog, Database_Services, Lot_Services, Lot_Event_Services
|
||||
$Insert App_Inserts
|
||||
$Insert Lot_Equates
|
||||
|
||||
@ -126,9 +126,15 @@ Event PUB_SUBMIT.CLICK()
|
||||
Case NewWfrQty LT CurrWfrQty
|
||||
AmountToDecrease = CurrWfrQty - NewWfrQty
|
||||
Lot_Services('ReduceLotWaferCount', LotId, AmountToDecrease, @User4)
|
||||
If Error_Services('NoError') then
|
||||
Lot_Event_Services('CreateLotEvent', LotId, Datetime(), 'COMMENT', 'Manual Lot Qty decrease performed.', '', @User4, '' , '')
|
||||
end
|
||||
Case NewWfrQty GT CurrWfrQty
|
||||
AmountToIncrease = NewWfrQty - CurrWfrQty
|
||||
Lot_Services('IncreaseLotWaferCount', LotId, AmountToIncrease, @User4)
|
||||
If Error_Services('NoError') then
|
||||
Lot_Event_Services('CreateLotEvent', LotId, Datetime(), 'COMMENT', 'Manual Lot Qty increase performed.', '', @User4, '' , '')
|
||||
end
|
||||
End Case
|
||||
If Error_Services('NoError') then
|
||||
msg(@Window, 'Wafer quantity adjusted successfully!')
|
||||
@ -176,3 +182,4 @@ return
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -3,25 +3,27 @@ Compile function NDW_WAFER_COUNTS_EVENTS(CtrlEntId, Event, @PARAMS)
|
||||
#window NDW_WAFER_COUNTS
|
||||
Declare function Reactor_Services, Database_Services, Get_Property, Error_Services, Environment_Services
|
||||
Declare function SRP_Array, Logging_Services
|
||||
Declare subroutine Set_Property, Logging_Services
|
||||
Declare subroutine Set_Property, Logging_Services, PlaceDialog
|
||||
|
||||
$Insert EVENT_SETUP
|
||||
$Insert APP_INSERTS
|
||||
$Insert REACTOR_EQUATES
|
||||
|
||||
EQU DATA_ASM_REACT_ID$ to 1
|
||||
EQU DATA_ASM_SUSC_CNT$ to 2
|
||||
EQU DATA_ASM_SUSC_THK$ to 3
|
||||
EQU DATA_ASM_TUBE_CNT$ to 4
|
||||
EQU DATA_ASM_TUBE_THK$ to 5
|
||||
EQU DATA_ASM_ARM_CNT$ to 6
|
||||
EQU DATA_ASM_REACT_ID$ to 1
|
||||
EQU DATA_ASM_SUSC_CNT$ to 2
|
||||
EQU DATA_ASM_SUSC_THK$ to 3
|
||||
EQU DATA_ASM_TUBE_CNT$ to 4
|
||||
EQU DATA_ASM_TUBE_THK$ to 5
|
||||
EQU DATA_ASM_ARM_CNT$ to 6
|
||||
EQU DATA_ASM_EXHAUST_THK$ to 7
|
||||
|
||||
EQU DATA_HTR_REACT_ID$ to 1
|
||||
EQU DATA_HTR_SUSC_CNT$ TO 2
|
||||
EQU DATA_HTR_SUSC_THK$ TO 3
|
||||
EQU DATA_HTR_TUBE_CNT$ TO 4
|
||||
EQU DATA_HTR_TUBE_THK$ TO 5
|
||||
EQU DATA_HTR_ARM_CNT$ TO 6
|
||||
EQU DATA_HTR_REACT_ID$ to 1
|
||||
EQU DATA_HTR_SUSC_CNT$ TO 2
|
||||
EQU DATA_HTR_SUSC_THK$ TO 3
|
||||
EQU DATA_HTR_TUBE_CNT$ TO 4
|
||||
EQU DATA_HTR_TUBE_THK$ TO 5
|
||||
EQU DATA_HTR_ARM_CNT$ TO 6
|
||||
EQU DATA_HTR_EXHAUST_THK$ TO 7
|
||||
|
||||
EQU DATA_EPP_REACT_ID$ to 1
|
||||
EQU DATA_EPP_SUSC_CNT$ TO 2
|
||||
@ -30,6 +32,7 @@ EQU DATA_EPP_BELL_JAR_CNT$ TO 4
|
||||
EQU DATA_EPP_BELL_JAR_THK$ TO 5
|
||||
EQU DATA_EPP_LOWER_QUARTZ_CNT$ TO 6
|
||||
EQU DATA_EPP_LOWER_QUARTZ_THK$ TO 7
|
||||
EQU DATA_EPP_EXHAUST_THK$ TO 8
|
||||
|
||||
ASMDataTable = @Window : '.OLE_DATA_ASM'
|
||||
HTRDataTable = @Window : '.OLE_DATA_HTR'
|
||||
@ -49,11 +52,11 @@ If Event EQ 'OLE' then
|
||||
Transfer Param1 to Event
|
||||
Transfer Param2 to Param1
|
||||
Transfer Param3 to Param2
|
||||
* Transfer Param4 to Param3
|
||||
* Transfer Param5 to Param4
|
||||
* Transfer Param6 to Param5
|
||||
* Transfer Param7 to Param6
|
||||
* Transfer Param8 to Param7
|
||||
Transfer Param4 to Param3
|
||||
Transfer Param5 to Param4
|
||||
Transfer Param6 to Param5
|
||||
Transfer Param7 to Param6
|
||||
Transfer Param8 to Param7
|
||||
end
|
||||
|
||||
GoToEvent Event for CtrlEntId else
|
||||
@ -67,17 +70,25 @@ Return EventFlow or 1
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
Event WINDOW.CREATE(CreateParam)
|
||||
|
||||
GoSub SetupOLEControls
|
||||
GoSub GetReactorMetrics
|
||||
|
||||
End Event
|
||||
|
||||
|
||||
Event TABCONTROL_1.CLICK()
|
||||
|
||||
Page = Get_Property(@Window : '.TABCONTROL_1', 'VALUE')
|
||||
Set_Property(@WINDOW,'VPOSITION', Page)
|
||||
|
||||
end event
|
||||
|
||||
|
||||
Event PUB_REFRESH_DATA.CLICK()
|
||||
|
||||
GoSub GetReactorMetrics
|
||||
|
||||
end event
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
@ -85,6 +96,7 @@ end event
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
GetReactorMetrics:
|
||||
|
||||
ReactorRec = ''
|
||||
ASMData = ''
|
||||
HTRData = ''
|
||||
@ -105,12 +117,13 @@ GetReactorMetrics:
|
||||
for each Reactor in ASMList using @FM setting rPos
|
||||
MetricData = Reactor_Services('GetWaferCntMetricsByReactorID', Reactor)
|
||||
if Error_Services('NoError') then
|
||||
ASMData<rPos, DATA_ASM_REACT_ID$> = MetricData<1, DATA_ASM_REACT_ID$>
|
||||
ASMData<rPos, DATA_ASM_SUSC_CNT$> = MetricData<1, DATA_ASM_SUSC_CNT$>
|
||||
ASMData<rPos, DATA_ASM_SUSC_THK$> = MetricData<1, DATA_ASM_SUSC_THK$>
|
||||
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_ARM_CNT$> = MetricData<1, DATA_ASM_ARM_CNT$>
|
||||
ASMData<rPos, DATA_ASM_REACT_ID$> = MetricData<1, DATA_ASM_REACT_ID$>
|
||||
ASMData<rPos, DATA_ASM_SUSC_CNT$> = MetricData<1, DATA_ASM_SUSC_CNT$>
|
||||
ASMData<rPos, DATA_ASM_SUSC_THK$> = MetricData<1, DATA_ASM_SUSC_THK$>
|
||||
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_ARM_CNT$> = MetricData<1, DATA_ASM_ARM_CNT$>
|
||||
ASMData<rPos, DATA_ASM_EXHAUST_THK$> = MetricData<1, DATA_ASM_EXHAUST_THK$>
|
||||
end else
|
||||
ErrorMessage = Error_Services('GetMessage')
|
||||
LogData = LoggingDTM : @FM : ErrorMessage
|
||||
@ -123,12 +136,13 @@ GetReactorMetrics:
|
||||
for each Reactor in HTRList using @FM setting rPos
|
||||
MetricData = Reactor_Services('GetWaferCntMetricsByReactorID', Reactor)
|
||||
if Error_Services('NoError') then
|
||||
HTRData<rPos, DATA_HTR_REACT_ID$> = MetricData <1, DATA_HTR_REACT_ID$>
|
||||
HTRData<rPos, DATA_HTR_SUSC_CNT$> = MetricData<1, DATA_HTR_SUSC_CNT$>
|
||||
HTRData<rPos, DATA_HTR_SUSC_THK$> = MetricData<1, DATA_HTR_SUSC_THK$>
|
||||
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_ARM_CNT$> = MetricData<1, DATA_HTR_ARM_CNT$>
|
||||
HTRData<rPos, DATA_HTR_REACT_ID$> = MetricData <1, DATA_HTR_REACT_ID$>
|
||||
HTRData<rPos, DATA_HTR_SUSC_CNT$> = MetricData<1, DATA_HTR_SUSC_CNT$>
|
||||
HTRData<rPos, DATA_HTR_SUSC_THK$> = MetricData<1, DATA_HTR_SUSC_THK$>
|
||||
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_ARM_CNT$> = MetricData<1, DATA_HTR_ARM_CNT$>
|
||||
HTRData<rPos, DATA_HTR_EXHAUST_THK$> = MetricData<1, DATA_HTR_EXHAUST_THK$>
|
||||
end else
|
||||
ErrorMessage = Error_Services('GetMessage')
|
||||
LogData = LoggingDTM : @FM : ErrorMessage
|
||||
@ -149,6 +163,7 @@ GetReactorMetrics:
|
||||
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_THK$> = MetricData<1, DATA_EPP_LOWER_QUARTZ_THK$>
|
||||
EPPData<rPos, DATA_EPP_EXHAUST_THK$> = MetricData<1, DATA_EPP_EXHAUST_THK$>
|
||||
end else
|
||||
ErrorMessage = Error_Services('GetMessage')
|
||||
LogData = LoggingDTM : @FM : ErrorMessage
|
||||
@ -159,36 +174,55 @@ GetReactorMetrics:
|
||||
|
||||
return
|
||||
|
||||
|
||||
SetupOLEControls:
|
||||
|
||||
//Set Row Headers to invisible
|
||||
// Set Row Headers to invisible
|
||||
Set_Property(ASMDataTable, "OLE.HeaderColumn[1]", '':@FM:False$)
|
||||
Set_Property(HTRDataTable, "OLE.HeaderColumn[1]", '':@FM:False$)
|
||||
Set_Property(EPPDataTable, "OLE.HeaderColumn[1]", '':@FM:False$)
|
||||
|
||||
//Set Number of columns for each table
|
||||
Set_Property(ASMDataTable, "OLE.Dimension", 6);*6 columns for ASM Data Table
|
||||
Set_Property(HTRDataTable, "OLE.Dimension", 6);*6 columns for HTR Data Table
|
||||
Set_Property(EPPDataTable, "OLE.Dimension", 7);*7 columns for EPP Data Table
|
||||
// Set Number of columns for each table
|
||||
Set_Property(ASMDataTable, "OLE.Dimension", 7);*6 columns for ASM Data Table
|
||||
Set_Property(HTRDataTable, "OLE.Dimension", 7);*6 columns for HTR Data Table
|
||||
Set_Property(EPPDataTable, "OLE.Dimension", 8);*7 columns for EPP Data Table
|
||||
|
||||
//Set size of columns
|
||||
// Set size of all columns
|
||||
ColSizeArray = ''
|
||||
ColSizeArray<1> = 100
|
||||
ColSizeArray<1> = 115
|
||||
Set_Property(ASMDataTable, "OLE.DataColumn[All]", ColSizeArray)
|
||||
Set_Property(HTRDataTable, "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
|
||||
HeaderTitles = 'Reactor#':@VM:'Susc. Wfr. Cnt.':@VM:'Susc. Thk':@VM:'Tube Wfr. Cnt.':@VM:'Tube Wfr. Thk':@VM:'Arm Wfr. Cnt.'
|
||||
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.'
|
||||
Set_Property(ASMDataTable, "OLE.TitleList", HeaderTitles)
|
||||
|
||||
//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.'
|
||||
HeaderTitles = 'Reactor#':@VM:'Susc. Run Cnt.':@VM:'Susc. Thk':@VM:'Tube Run Cnt.':@VM:'Tube Thk':@VM:'Arm Wfr. Cnt.':@VM:'Exhaust Chamber Thk.'
|
||||
Set_Property(HTRDataTable, "OLE.TitleList", HeaderTitles)
|
||||
|
||||
//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.'
|
||||
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.'
|
||||
Set_Property(EPPDataTable, "OLE.TitleList", HeaderTitles)
|
||||
|
||||
return
|
||||
|
||||
|
||||
|
@ -50,11 +50,13 @@ Return Response or ""
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Service Parameter Options
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
Options BOOLEAN = True$, False$
|
||||
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_STATUSES = 'new','creating','not-started','in-progress','cancelled','done'
|
||||
Options REACTOR_TYPES = 'ASM','ASM+','HTR','EPP'
|
||||
Options BOOLEAN = True$, False$
|
||||
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_STATUSES = 'new','in-edit','creating','not-started','in-progress','cancelled','done'
|
||||
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
|
||||
@ -85,6 +87,7 @@ Service GetOrderIds(EntityType=ENTITY_TYPES, EntityID, OrderTypes=ORDER_TYPES, O
|
||||
For each Val in IsComplete using @VM
|
||||
Query := @VM : Val
|
||||
Next Val
|
||||
Query := @FM
|
||||
end
|
||||
Btree.Extract(Query, Table, hDict, OrderKeys, Option, Flag)
|
||||
If Flag NE 0 then
|
||||
@ -106,6 +109,64 @@ Service GetOrderIds(EntityType=ENTITY_TYPES, EntityID, OrderTypes=ORDER_TYPES, O
|
||||
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()
|
||||
|
||||
hSysLists = Database_Services('GetTableHandle', 'SYSLISTS')
|
||||
@ -194,7 +255,9 @@ Service GetActiveOrders(EntityType=ENTITY_TYPES, EntityId, OrderTypes=ORDER_TYPE
|
||||
end service
|
||||
|
||||
|
||||
Service CreateNewOrder(EntityType=ENTITY_TYPES, EntityID, OrderType=ORDER_TYPES, OrderFlows, OrderResponseLevel, ChecklistIds)
|
||||
Service CreateNewOrder(EntityType=ENTITY_TYPES, EntityID, OrderType=ORDER_TYPES, OrderFlows, OrderResponseLevel, ChecklistIds, Intrusive=BOOLEAN)
|
||||
|
||||
If Intrusive NE True$ then Intrusive = False$
|
||||
|
||||
ErrorMsg = ''
|
||||
EntityTypes = 'REACTOR,REACTOR_LOG'
|
||||
@ -229,7 +292,39 @@ Service CreateNewOrder(EntityType=ENTITY_TYPES, EntityID, OrderType=ORDER_TYPES,
|
||||
LogData<3> = 'Attempting to create NICA order for entity ':EntityType:' ' :EntityID:' of type ':OrderType
|
||||
Logging_Services('AppendLog', objLog, LogData, @RM, @FM, False$)
|
||||
|
||||
CurrActiveOrders = Nica_Orders_Services('GetActiveOrders', EntityType, EntityID, OrderType)
|
||||
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)
|
||||
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 '')
|
||||
|
||||
If ( (OrderTypeAlreadyActive EQ False$) or (OrderType EQ 'INTRUSIVE_MAINT') or (OrderType EQ 'ABORT_ALARM') ) then
|
||||
@ -300,6 +395,17 @@ Service CreateNewOrder(EntityType=ENTITY_TYPES, EntityID, OrderType=ORDER_TYPES,
|
||||
end
|
||||
|
||||
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')
|
||||
ChecklistArray = NewChecklistIds:@FM:NewChecklistPriorities
|
||||
ChecklistArray = SRP_Array('SortRows', ChecklistArray, 'AR2', 'ARRAY', @FM, @VM)
|
||||
@ -369,6 +475,7 @@ Service CreateNewOrder(EntityType=ENTITY_TYPES, EntityID, OrderType=ORDER_TYPES,
|
||||
end
|
||||
NicaOrderRec<NICA_ORDERS.ORDER_FLOW_IDS$> = OrderFlows
|
||||
NicaOrderRec<NICA_ORDERS.ORDER_RESPONSE_LEVEL$> = OrderResponseLevel
|
||||
NicaOrderRec<NICA_ORDERS.INTRUSIVE$> = Intrusive
|
||||
LogNicaOrderRec = NicaOrderRec
|
||||
Swap @FM with ',' in LogNicaOrderRec
|
||||
LogData = ''
|
||||
@ -535,9 +642,9 @@ Service CancelOrder(OrderId)
|
||||
If HttpResponseJson NE '' then
|
||||
ObjResponseJson = ''
|
||||
If SRP_JSON(ObjResponseJson, 'Parse', HttpResponseJson) EQ '' then
|
||||
IsComplete = SRP_JSON(ObjResponseJson, 'GetValue', 'pendingUpdate')
|
||||
NicaOrderRec<NICA_ORDERS.ORDER_STATUS$> = SRP_JSON(ObjResponseJson, 'GetValue', 'state')
|
||||
NicaOrderRec<NICA_ORDERS.IS_COMPLETE$> = SRP_JSON(ObjResponseJson, 'GetValue', 'isComplete')
|
||||
IsComplete = SRP_JSON(ObjResponseJson, 'GetValue', 'isComplete')
|
||||
NicaOrderRec<NICA_ORDERS.ORDER_STATUS$> = 'cancelled'
|
||||
NicaOrderRec<NICA_ORDERS.IS_COMPLETE$> = IsComplete
|
||||
CloseDtm = Datetime()
|
||||
NicaOrderRec<NICA_ORDERS.CLOSED_DTM$> = CloseDtm
|
||||
If IsComplete EQ False$ then
|
||||
@ -900,8 +1007,120 @@ Service GetAvailableFlowIds(NicaOrderType=ORDER_TYPES)
|
||||
|
||||
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
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
|
@ -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 Logging_Services, Datetime, SRP_DateTime
|
||||
DECLARE FUNCTION Logging_Services, Datetime, SRP_DateTime, GetTickCount
|
||||
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
|
||||
|
||||
@ -42,6 +42,13 @@ Headers = 'Logging DTM' : @FM : 'WOMatKey' : @FM : ' SAPBatchNo' : @FM : 'Fa
|
||||
objLog = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, Comma$, Headers, '', False$, False$)
|
||||
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"'
|
||||
ErrorMsg = ''
|
||||
|
||||
@ -116,6 +123,9 @@ RETURN
|
||||
Post:
|
||||
* * * * * * *
|
||||
|
||||
StartTick = GetTickCount()
|
||||
MetricName = 'Post'
|
||||
|
||||
hSysLists = Database_Services('GetTableHandle', 'SYSLISTS')
|
||||
ServiceKeyID = 'Obj_Post_Log*Post'
|
||||
Lock hSysLists, ServiceKeyID then
|
||||
@ -229,5 +239,9 @@ Post:
|
||||
Unlock hSysLists, ServiceKeyID else Null
|
||||
end
|
||||
|
||||
EndTick = GetTickCount()
|
||||
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
|
||||
|
||||
RETURN
|
||||
|
||||
|
||||
|
@ -18,8 +18,8 @@ COMPILE FUNCTION obj_Reactor(Method,Parms)
|
||||
|
||||
|
||||
|
||||
DECLARE SUBROUTINE Set_Status, Msg, obj_Tables, Send_Dyn, ErrMsg
|
||||
DECLARE FUNCTION Get_Status, Msg, Utility, obj_Tables
|
||||
DECLARE SUBROUTINE Set_Status, Msg, obj_Tables, Send_Dyn, ErrMsg, Mona_Services
|
||||
DECLARE FUNCTION Get_Status, Msg, Utility, obj_Tables, Environment_Services, GetTickCount
|
||||
|
||||
|
||||
$INSERT REACTOR_EQUATES
|
||||
@ -28,6 +28,14 @@ $INSERT REACT_STATE_EQUATES
|
||||
$INSERT REACT_ITEM_EQUATES
|
||||
$INSERT MSG_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"'
|
||||
ErrorMsg = ''
|
||||
@ -66,6 +74,9 @@ RETURN Result
|
||||
CurrItem:
|
||||
* * * * * * *
|
||||
|
||||
StartTick = GetTickCount()
|
||||
MetricName = 'CurrItem'
|
||||
|
||||
ReactNo = Parms[1,@RM]
|
||||
ItemType = Parms[COL2()+1,@RM]
|
||||
ReactRec = Parms[COL2()+1,@RM]
|
||||
@ -96,6 +107,9 @@ LOCATE ItemType IN CurrInstTypes USING @VM SETTING Pos THEN
|
||||
Result = FIELD(CurrInstItems<1,Pos>,'*',2)
|
||||
END
|
||||
|
||||
EndTick = GetTickCount()
|
||||
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
|
||||
|
||||
RETURN
|
||||
|
||||
|
||||
@ -103,6 +117,9 @@ RETURN
|
||||
CurrGraphite:
|
||||
* * * * * * *
|
||||
|
||||
StartTick = GetTickCount()
|
||||
MetricName = 'CurrGraphite'
|
||||
|
||||
ReactNo = Parms[1,@RM]
|
||||
ReactRec = Parms[COL2()+1,@RM]
|
||||
|
||||
@ -135,6 +152,9 @@ FOR I = 1 TO ciCnt
|
||||
END
|
||||
NEXT I
|
||||
|
||||
EndTick = GetTickCount()
|
||||
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
|
||||
|
||||
RETURN
|
||||
|
||||
|
||||
|
@ -18,7 +18,7 @@ COMPILE FUNCTION obj_Reactor_Log(Method,Parms)
|
||||
*/
|
||||
|
||||
DECLARE SUBROUTINE Set_Status, Msg, obj_Tables, Send_Dyn, ErrMsg, Btree.Extract, obj_React_Item_Hist, Update_Index, obj_Post_Log
|
||||
Declare subroutine Error_Services, Database_Services
|
||||
Declare subroutine Error_Services, Database_Services, React_Item_Services
|
||||
DECLARE FUNCTION Get_Status, Msg, Utility, obj_Tables, obj_React_Item, obj_Calendar, Database_Services
|
||||
|
||||
|
||||
@ -195,18 +195,16 @@ PostReactItems:
|
||||
ReactorLogRec<REACTOR_LOG_RI_POST_DTM$> = PostDTM
|
||||
|
||||
otParms = FIELDSTORE(otParms,@RM,4,0,ReactorLogRec)
|
||||
//obj_Tables('WriteRec',otParms)
|
||||
|
||||
Database_Services('WriteDataRow', 'REACTOR_LOG', RLNo, ReactorLogRec, 1, 0, 1)
|
||||
|
||||
Update_Index('REACT_ITEM_HIST', 'INST_RL_ID', False$, True$) ;* Don't wait for indexer - flush pending indexes now
|
||||
Update_Index('REACT_ITEM_HIST', 'REM_RL_ID', False$, True$)
|
||||
|
||||
end else
|
||||
Error_Services('Add', ValidationFailureReason)
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
RETURN
|
||||
|
||||
|
||||
@ -386,10 +384,3 @@ RemHistKeys:
|
||||
|
||||
RETURN
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -18,11 +18,12 @@ COMPILE FUNCTION obj_React_Item_Hist(Method,Parms)
|
||||
*/
|
||||
|
||||
|
||||
DECLARE FUNCTION Get_Status, Msg, Utility, obj_Tables, Send_Dyn, obj_Popup
|
||||
DECLARE SUBROUTINE Set_Status, Msg, obj_Tables, Send_Dyn
|
||||
DECLARE SUBROUTINE ErrMsg, Btree.Extract
|
||||
DECLARE FUNCTION Get_Status, Msg, Utility, obj_Tables, Send_Dyn, obj_Popup
|
||||
DECLARE SUBROUTINE Set_Status, Msg, obj_Tables, Send_Dyn, ErrMsg, Btree.Extract, React_Item_Services
|
||||
|
||||
$Insert LOGICAL
|
||||
$INSERT REACT_ITEM_HIST_EQUATES
|
||||
$INSERT RLIST_EQUATES
|
||||
|
||||
EQU CRLF$ TO \0D0A\
|
||||
EQU TAB$ TO CHAR(9)
|
||||
@ -62,26 +63,26 @@ RETURN Result
|
||||
Install:
|
||||
* * * * * * *
|
||||
|
||||
RIHKey = Parms[1,@RM]
|
||||
RL_Id = Parms[COL2()+1,@RM]
|
||||
ReactWfrCnt = Parms[COL2()+1,@RM]
|
||||
ReactHrs = Parms[COL2()+1,@RM]
|
||||
RIHKey = Parms[1,@RM]
|
||||
RL_Id = Parms[COL2()+1,@RM]
|
||||
ReactWfrCnt = Parms[COL2()+1,@RM]
|
||||
ReactHrs = Parms[COL2()+1,@RM]
|
||||
|
||||
IF RIHKey = '' THEN ErrorMsg = 'Null Parameter "RIHKey" passed to routine. (':Method:')'
|
||||
IF RL_Id = '' THEN ErrorMsg = 'Null Parameter "RL_Id" passed to routine. (':Method:')'
|
||||
*IF ReactWfrCnt = '' THEN ErrorMsg = 'Null Parameter "ReactWfrCnt" passed to routine. (':Method:')' ;* Optional
|
||||
*IF ReactHrs = '' THEN ErrorMsg = 'Null Parameter "ReactHrs" passed to routine. (':Method:')' ;* Optional
|
||||
IF RIHKey = '' THEN ErrorMsg = 'Null Parameter "RIHKey" passed to routine. (':Method:')'
|
||||
IF RL_Id = '' THEN ErrorMsg = 'Null Parameter "RL_Id" passed to routine. (':Method:')'
|
||||
|
||||
IF ErrorMsg NE '' THEN RETURN
|
||||
IF ErrorMsg NE '' THEN RETURN
|
||||
|
||||
RIHRec = ''
|
||||
RIHRec<REACT_ITEM_HIST_INST_RL_ID$> = RL_ID
|
||||
RIHRec<REACT_ITEM_HIST_INST_REACT_WFR_CNT$> = ReactWfrCnt
|
||||
RIHRec<REACT_ITEM_HIST_INST_REACT_HRS$> = ReactHrs
|
||||
RIHRec = ''
|
||||
RIHRec<REACT_ITEM_HIST_INST_RL_ID$> = RL_ID
|
||||
RIHRec<REACT_ITEM_HIST_INST_REACT_WFR_CNT$> = ReactWfrCnt
|
||||
RIHRec<REACT_ITEM_HIST_INST_REACT_HRS$> = ReactHrs
|
||||
|
||||
otParms = 'REACT_ITEM_HIST':@RM:RIHKey:@RM:@RM:RIHRec
|
||||
otParms = 'REACT_ITEM_HIST':@RM:RIHKey:@RM:@RM:RIHRec
|
||||
|
||||
obj_Tables('WriteRec',otParms)
|
||||
obj_Tables('WriteRec',otParms)
|
||||
RINo = Field(RIHKey, '*', 2, 1)
|
||||
React_Item_Services('UpdateReactItemStatus', RINo)
|
||||
|
||||
RETURN
|
||||
|
||||
@ -90,38 +91,36 @@ RETURN
|
||||
Remove:
|
||||
* * * * * * *
|
||||
|
||||
RIHKey = Parms[1,@RM]
|
||||
RemoveDTM = Parms[COL2()+1,@RM] ;* Internal format *
|
||||
RL_Id = Parms[COL2()+1,@RM]
|
||||
ReactWfrCnt = Parms[COL2()+1,@RM]
|
||||
ReactHrs = Parms[COL2()+1,@RM]
|
||||
RIHKey = Parms[1,@RM]
|
||||
RemoveDTM = Parms[COL2()+1,@RM] ;* Internal format *
|
||||
RL_Id = Parms[COL2()+1,@RM]
|
||||
ReactWfrCnt = Parms[COL2()+1,@RM]
|
||||
ReactHrs = Parms[COL2()+1,@RM]
|
||||
|
||||
IF RIHKey = '' THEN ErrorMsg = 'Null Parameter "RIHKey" passed to routine. (':Method:')'
|
||||
IF RemoveDTM = '' THEN ErrorMsg = 'Null Parameter "RemoveDTM" passed to routine. (':Method:')'
|
||||
IF RL_Id = '' THEN ErrorMsg = 'Null Parameter "RL_Id" passed to routine. (':Method:')'
|
||||
*IF ReactWfrCnt = '' THEN ErrorMsg = 'Null Parameter "ReactWfrCnt" passed to routine. (':Method:')' ;* Optional
|
||||
*IF ReactHrs = '' THEN ErrorMsg = 'Null Parameter "ReactHrs" passed to routine. (':Method:')' ;* Optional
|
||||
IF RIHKey = '' THEN ErrorMsg = 'Null Parameter "RIHKey" passed to routine. (':Method:')'
|
||||
IF RemoveDTM = '' THEN ErrorMsg = 'Null Parameter "RemoveDTM" passed to routine. (':Method:')'
|
||||
IF RL_Id = '' THEN ErrorMsg = 'Null Parameter "RL_Id" passed to routine. (':Method:')'
|
||||
|
||||
IF ErrorMsg NE '' THEN RETURN
|
||||
IF ErrorMsg NE '' THEN RETURN
|
||||
|
||||
* Read and update record *
|
||||
otParms = 'REACT_ITEM_HIST':@RM:RIHKey
|
||||
|
||||
otParms = 'REACT_ITEM_HIST':@RM:RIHKey
|
||||
RIHRec = obj_Tables('ReadRec',otParms)
|
||||
|
||||
RIHRec = obj_Tables('ReadRec',otParms)
|
||||
IF Get_Status(errCode) THEN
|
||||
Set_Status(0)
|
||||
RIHRec = ''
|
||||
END
|
||||
|
||||
IF Get_Status(errCode) THEN
|
||||
Set_Status(0)
|
||||
RIHRec = ''
|
||||
END
|
||||
RIHRec<REACT_ITEM_HIST_REM_DTM$> = RemoveDTM
|
||||
RIHRec<REACT_ITEM_HIST_REM_RL_ID$> = RL_Id
|
||||
RIHRec<REACT_ITEM_HIST_REM_REACT_WFR_CNT$> = ReactWfrCnt
|
||||
RIHRec<REACT_ITEM_HIST_REM_REACT_HRS$> = ReactHrs
|
||||
|
||||
RIHRec<REACT_ITEM_HIST_REM_DTM$> = RemoveDTM
|
||||
RIHRec<REACT_ITEM_HIST_REM_RL_ID$> = RL_Id
|
||||
RIHRec<REACT_ITEM_HIST_REM_REACT_WFR_CNT$> = ReactWfrCnt
|
||||
RIHRec<REACT_ITEM_HIST_REM_REACT_HRS$> = ReactHrs
|
||||
|
||||
otParms = FIELDSTORE(otParms,@RM,4,0,RIHRec)
|
||||
obj_Tables('WriteRec',otParms)
|
||||
otParms = FIELDSTORE(otParms,@RM,4,0,RIHRec)
|
||||
obj_Tables('WriteRec',otParms)
|
||||
RINo = Field(RIHKey, '*', 2, 1)
|
||||
React_Item_Services('UpdateReactItemStatus', RINo)
|
||||
|
||||
RETURN
|
||||
|
||||
@ -130,24 +129,21 @@ RETURN
|
||||
ClearRemove:
|
||||
* * * * * * *
|
||||
|
||||
RIHKey = Parms[1,@RM]
|
||||
RIHKey = Parms[1,@RM]
|
||||
|
||||
IF RIHKey = '' THEN RETURN
|
||||
IF RIHKey = '' THEN RETURN
|
||||
|
||||
otParms = 'REACT_ITEM_HIST':@RM:RIHKey
|
||||
|
||||
* Read and update record *
|
||||
RIHRec = obj_Tables('ReadRec',otParms)
|
||||
|
||||
otParms = 'REACT_ITEM_HIST':@RM:RIHKey
|
||||
RIHRec<REACT_ITEM_HIST_REM_DTM$> = ''
|
||||
RIHRec<REACT_ITEM_HIST_REM_RL_ID$> = ''
|
||||
RIHRec<REACT_ITEM_HIST_REM_REACT_WFR_CNT$> = ''
|
||||
RIHRec<REACT_ITEM_HIST_REM_REACT_HRS$> = ''
|
||||
|
||||
RIHRec = obj_Tables('ReadRec',otParms)
|
||||
|
||||
RIHRec<REACT_ITEM_HIST_REM_DTM$> = ''
|
||||
RIHRec<REACT_ITEM_HIST_REM_RL_ID$> = ''
|
||||
RIHRec<REACT_ITEM_HIST_REM_REACT_WFR_CNT$> = ''
|
||||
RIHRec<REACT_ITEM_HIST_REM_REACT_HRS$> = ''
|
||||
|
||||
otParms = FIELDSTORE(otParms,@RM,4,0,RIHRec)
|
||||
obj_Tables('WriteRec',otParms)
|
||||
otParms = FIELDSTORE(otParms,@RM,4,0,RIHRec)
|
||||
obj_Tables('WriteRec',otParms)
|
||||
|
||||
RETURN
|
||||
|
||||
@ -156,49 +152,50 @@ RETURN
|
||||
GetHistory:
|
||||
* * * * * * *
|
||||
|
||||
ReactNo = Parms[1,@RM]
|
||||
RINo = Parms[COL2()+1,@RM]
|
||||
RIType = Parms[COL2()+1,@RM]
|
||||
ReactNo = Parms[1,@RM]
|
||||
RINo = Parms[COL2()+1,@RM]
|
||||
RIType = Parms[COL2()+1,@RM]
|
||||
|
||||
IF ReactNo = '' AND RINo = '' AND RIType = '' THEN RETURN
|
||||
IF ReactNo = '' AND RINo = '' AND RIType = '' THEN RETURN
|
||||
|
||||
OPEN 'DICT.REACT_ITEM_HIST' TO DictVar ELSE
|
||||
ErrorMsg = 'Unable to open DICT.REACT_ITEM_HIST for index lookup'
|
||||
RETURN
|
||||
END
|
||||
OPEN 'DICT.REACT_ITEM_HIST' TO DictVar ELSE
|
||||
ErrorMsg = 'Unable to open DICT.REACT_ITEM_HIST for index lookup'
|
||||
RETURN
|
||||
END
|
||||
|
||||
Search = ''
|
||||
Search = ''
|
||||
|
||||
IF ReactNo NE '' THEN Search := 'REACT_NO':@VM:ReactNo:@FM
|
||||
IF RINo NE '' THEN Search := 'RI_NO':@VM:RINo:@FM
|
||||
IF RIType NE '' THEN Search := 'RI_TYPE':@VM:RIType:@FM
|
||||
IF ReactNo NE '' THEN Search := 'REACT_NO':@VM:ReactNo:@FM
|
||||
IF RINo NE '' THEN Search := 'RI_NO':@VM:RINo:@FM
|
||||
IF RIType NE '' THEN Search := 'RI_TYPE':@VM:RIType:@FM
|
||||
|
||||
Option = ''
|
||||
Flag = ''
|
||||
Option = ''
|
||||
Flag = ''
|
||||
|
||||
Btree.Extract(Search, 'REACT_ITEM_HIST', DictVar, RIKeys, Option, Flag) ;* Get unsorted keys based on Search parameters
|
||||
Btree.Extract(Search, 'REACT_ITEM_HIST', DictVar, RIKeys, Option, Flag) ;* Get unsorted keys based on Search parameters
|
||||
|
||||
* Put sort data in first column (Install DTM)
|
||||
// Put sort data in first column (Install DTM)
|
||||
|
||||
WorkList = ''
|
||||
riCnt = COUNT(RIKeys,@VM) + (RIKeys NE '')
|
||||
FOR I = 1 TO riCnt
|
||||
RIKey = RIKeys<1,I>
|
||||
WorkList<I> = FIELD(RIKey,'*',3):@VM:RIKey
|
||||
NEXT I
|
||||
WorkList = ''
|
||||
riCnt = COUNT(RIKeys,@VM) + (RIKeys NE '')
|
||||
FOR I = 1 TO riCnt
|
||||
RIKey = RIKeys<1,I>
|
||||
WorkList<I> = FIELD(RIKey,'*',3):@VM:RIKey
|
||||
NEXT I
|
||||
|
||||
WorkList := @RM
|
||||
WorkList := @RM
|
||||
|
||||
CONVERT @FM:@VM TO @RM:@FM IN WorkList ;* push delimiters higher for V119
|
||||
CONVERT @FM:@VM TO @RM:@FM IN WorkList ;* push delimiters higher for V119
|
||||
|
||||
CALL V119('S','','D','L',WorkList,'') ;* Descending Left justified sort
|
||||
CALL V119('S','','D','L',WorkList,'') ;* Descending Left justified sort
|
||||
|
||||
CONVERT @FM:@RM TO @VM:@FM IN WorkList ;* pull delimiters lower
|
||||
CONVERT @FM:@RM TO @VM:@FM IN WorkList ;* pull delimiters lower
|
||||
|
||||
WorkList[-1,1] = '' ;* Trim trailing delimiter
|
||||
WorkList[-1,1] = '' ;* Trim trailing delimiter
|
||||
|
||||
FOR I = 1 TO riCnt
|
||||
Result<1,I> = WorkList<I,2> ;* Strip Sort column(s)
|
||||
NEXT I
|
||||
FOR I = 1 TO riCnt
|
||||
Result<1,I> = WorkList<I,2> ;* Strip Sort column(s)
|
||||
NEXT I
|
||||
|
||||
RETURN
|
||||
|
||||
|
@ -15,10 +15,10 @@ COMPILE FUNCTION obj_React_State(Method,Parms)
|
||||
*/
|
||||
|
||||
|
||||
DECLARE SUBROUTINE Set_Status, Msg, obj_Tables, Send_Dyn, ErrMsg, Database_Services
|
||||
DECLARE SUBROUTINE Set_Status, Msg, obj_Tables, Send_Dyn, ErrMsg, Database_Services, Mona_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 PROD_SPEC_EQUATES
|
||||
@ -28,6 +28,12 @@ $INSERT LOGICAL
|
||||
EQU CRLF$ TO \0D0A\
|
||||
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"'
|
||||
ErrorMsg = ''
|
||||
@ -62,6 +68,9 @@ RETURN Result
|
||||
ReactRunUnload:
|
||||
* * * * * * *
|
||||
|
||||
StartTick = GetTickCount()
|
||||
MetricName = 'ReactRunUnload'
|
||||
|
||||
* Upadate all parameters set at Reactor Unload signature *
|
||||
|
||||
ReactNo = Parms[1,@RM]
|
||||
@ -115,6 +124,9 @@ end
|
||||
* otParms = FieldStore(otParms,@RM,4,0,RSRec)
|
||||
* obj_Tables('WriteRec',otParms)
|
||||
|
||||
EndTick = GetTickCount()
|
||||
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
|
||||
|
||||
RETURN
|
||||
|
||||
|
||||
|
@ -20,9 +20,9 @@ COMPILE FUNCTION obj_React_Status(Method,Parms)
|
||||
#pragma precomp SRP_PreCompiler
|
||||
|
||||
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
|
||||
DECLARE FUNCTION Error_Services, Environment_Services, Logging_Services, Override_Log_Services, GetTickCount
|
||||
DECLARE SUBROUTINE Set_Status, Msg, obj_Tables, Send_Dyn, Btree.Extract, ErrMsg, Database_Services, Rlist
|
||||
DECLARE SUBROUTINE Logging_Services
|
||||
DECLARE SUBROUTINE Logging_Services, Mona_Services
|
||||
|
||||
$INSERT LOGICAL
|
||||
$INSERT MSG_EQUATES
|
||||
@ -43,6 +43,13 @@ 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'
|
||||
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"'
|
||||
ErrorMsg = ''
|
||||
|
||||
@ -125,6 +132,9 @@ RETURN
|
||||
CassLoad:
|
||||
* * * * * * *
|
||||
|
||||
StartTick = GetTickCount()
|
||||
MetricName = 'CassLoad'
|
||||
|
||||
ReactNo = Parms[1,@RM]
|
||||
WONo = Parms[COL2()+1,@RM]
|
||||
CassNo = Parms[COL2()+1,@RM]
|
||||
@ -203,12 +213,17 @@ CassLoad:
|
||||
|
||||
Result = IdleTime
|
||||
|
||||
EndTick = GetTickCount()
|
||||
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
|
||||
|
||||
RETURN
|
||||
|
||||
|
||||
* * * * * * *
|
||||
CassUnload:
|
||||
* * * * * * *
|
||||
StartTick = GetTickCount()
|
||||
MetricName = 'CassUnload'
|
||||
|
||||
ReactNo = Parms[1,@RM]
|
||||
WONo = Parms[COL2()+1,@RM]
|
||||
@ -271,12 +286,17 @@ CassUnload:
|
||||
ErrorMsg = Error_Services('GetMessage')
|
||||
end
|
||||
|
||||
EndTick = GetTickCount()
|
||||
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
|
||||
|
||||
RETURN
|
||||
|
||||
|
||||
* * * * * * *
|
||||
ReactorLoad:
|
||||
* * * * * * *
|
||||
StartTick = GetTickCount()
|
||||
MetricName = 'ReactorLoad'
|
||||
|
||||
* EpiPro Reactor Load
|
||||
|
||||
@ -362,11 +382,16 @@ ReactorLoad:
|
||||
ErrorMsg = 'Unable to read REACT_STATUS record ':ReactNo:' for update (':Method:').'
|
||||
end
|
||||
|
||||
EndTick = GetTickCount()
|
||||
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
|
||||
|
||||
RETURN
|
||||
|
||||
* * * * * * *
|
||||
ReactorUnload:
|
||||
* * * * * * *
|
||||
StartTick = GetTickCount()
|
||||
MetricName = 'ReactorUnload'
|
||||
|
||||
* EpiPro Reactor Unload
|
||||
|
||||
@ -432,6 +457,9 @@ ReactorUnload:
|
||||
ErrorMsg = Error_Services('GetMessage')
|
||||
end
|
||||
|
||||
EndTick = GetTickCount()
|
||||
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
|
||||
|
||||
RETURN
|
||||
|
||||
|
||||
|
@ -28,11 +28,12 @@ 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 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 Error_Services, Memberof, Datetime
|
||||
Declare Function Error_Services, Memberof, Datetime, GetTickCount
|
||||
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_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 Mona_Services
|
||||
|
||||
$Insert MSG_EQUATES
|
||||
$Insert WO_MAT_EQUATES
|
||||
@ -120,6 +121,13 @@ SAPFileName = LogDate[7, 4] : '-' : LogDate[1, 2] : '-' : LogDate[4, 2] : ' SetS
|
||||
SAPHeaders = 'Logging DTM' : @FM : 'WOMatKey' : @FM : 'SAPBatchNo'
|
||||
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(Parms)) THEN Parms = ''
|
||||
|
||||
@ -634,6 +642,9 @@ RETURN
|
||||
CurrStatus:
|
||||
* * * * * * *
|
||||
|
||||
StartTick = GetTickCount()
|
||||
MetricName = 'CurrStatus'
|
||||
|
||||
IF NOT(ASSIGNED(WOMatKey)) THEN WOMatKey = Parms[1,@RM]
|
||||
IF NOT(ASSIGNED(WOMatRec)) THEN WOMatRec = Parms[COL2()+1,@RM]
|
||||
|
||||
@ -894,6 +905,9 @@ CurrStatus:
|
||||
|
||||
IF Result = 'RTS' AND WOMatRec<WO_MAT_SHIP_HOLD$> = 1 THEN Result = 'SHOLD'
|
||||
|
||||
EndTick = GetTickCount()
|
||||
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
|
||||
|
||||
RETURN
|
||||
|
||||
|
||||
@ -5566,3 +5580,4 @@ ExpCOA:
|
||||
RETURN
|
||||
|
||||
|
||||
|
||||
|
@ -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 Logging_Services, Environment_Services, RTI_CreateGUID, Error_Services, Datetime
|
||||
Declare function Logging_Services, Environment_Services, RTI_CreateGUID, Error_Services, Datetime, GetTickCount
|
||||
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
|
||||
DECLARE SUBROUTINE obj_WO_Mat, Send_Info, obj_Notes, Logging_Services, Database_Services, Lot_Event_Services, Mona_Services
|
||||
|
||||
$INSERT MSG_EQUATES
|
||||
$INSERT WO_MAT_LOG_EQUATES
|
||||
@ -49,6 +49,13 @@ Headers = 'Logging DTM'
|
||||
objLog = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, Comma$, Headers, '', False$, False$)
|
||||
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"'
|
||||
ErrorMsg = ''
|
||||
|
||||
@ -77,6 +84,8 @@ RETURN Result
|
||||
* * * * * * *
|
||||
Create:
|
||||
* * * * * * *
|
||||
StartTick = GetTickCount()
|
||||
MetricName = 'Create'
|
||||
|
||||
LogFile = Parms[1,@RM]
|
||||
TransDTM = Parms[COL2()+1,@RM]
|
||||
@ -233,6 +242,8 @@ Create:
|
||||
ErrorMsg = Error_Services('GetMessage')
|
||||
end
|
||||
|
||||
EndTick = GetTickCount()
|
||||
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
|
||||
RETURN
|
||||
|
||||
|
||||
@ -364,3 +375,4 @@ Post:
|
||||
|
||||
RETURN
|
||||
|
||||
|
||||
|
@ -15,8 +15,9 @@ COMPILE FUNCTION obj_WO_React(Method,Parms)
|
||||
*/
|
||||
|
||||
|
||||
DECLARE FUNCTION Get_Status, Msg, Utility, obj_Tables, NextKey, obj_Prod_Spec, obj_WO_Mat_QA
|
||||
DECLARE SUBROUTINE Set_Status, Msg, obj_Tables, RList, ErrMsg, Btree.Extract, obj_WO_Mat_QA
|
||||
DECLARE FUNCTION Get_Status, Msg, Utility, obj_Tables, NextKey, obj_Prod_Spec, obj_WO_Mat_QA, GetTickCount
|
||||
Declare function Environment_Services
|
||||
DECLARE SUBROUTINE Set_Status, Msg, obj_Tables, RList, ErrMsg, Btree.Extract, obj_WO_Mat_QA, Mona_Services
|
||||
|
||||
$INSERT MSG_EQUATES
|
||||
$INSERT WO_REACT_EQUATES
|
||||
@ -24,6 +25,7 @@ $INSERT PRS_STAGE_EQUATES
|
||||
$INSERT WO_MAT_EQUATES
|
||||
$INSERT RDS_EQUATES
|
||||
$INSERT QA_MET_EQUATES ;* Used in GetQAMet data structure return variable
|
||||
$Insert LOGICAL
|
||||
|
||||
|
||||
ErrTitle = 'Error in Stored Procedure "obj_PRS_Prop"'
|
||||
@ -40,6 +42,13 @@ END
|
||||
Result = ''
|
||||
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
|
||||
CASE Method = 'AddRdsNo' ; GOSUB AddRdsNo
|
||||
CASE Method = 'RemRdsNo' ; GOSUB RemRdsNo
|
||||
@ -61,6 +70,9 @@ RETURN Result
|
||||
AddRdsNo:
|
||||
* * * * * * *
|
||||
|
||||
StartTick = GetTickCount()
|
||||
MetricName = 'AddRdsNo'
|
||||
|
||||
WONo = Parms[1,@RM]
|
||||
StepNo = Parms[COL2()+1,@RM]
|
||||
ReactNo = Parms[COL2()+1,@RM]
|
||||
@ -135,6 +147,9 @@ obj_Tables('WriteOnlyRec',otParms) ;* Done with updates to the WO_REA
|
||||
|
||||
Result = Log
|
||||
|
||||
EndTick = GetTickCount()
|
||||
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
|
||||
|
||||
RETURN
|
||||
|
||||
|
||||
@ -143,6 +158,9 @@ RETURN
|
||||
RemRDSNo:
|
||||
* * * * * * *
|
||||
|
||||
StartTick = GetTickCount()
|
||||
MetricName = 'RemRDSNo'
|
||||
|
||||
WONo = Parms[1,@RM]
|
||||
StepNo = Parms[COL2()+1,@RM]
|
||||
ReactNo = Parms[COL2()+1,@RM]
|
||||
@ -218,6 +236,9 @@ obj_Tables('WriteOnlyRec',otParms) ;* Done with updates to the WO_REA
|
||||
|
||||
Result = Log
|
||||
|
||||
EndTick = GetTickCount()
|
||||
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
|
||||
|
||||
RETURN
|
||||
|
||||
|
||||
|
@ -1,7 +1,8 @@
|
||||
Compile function Override_Log_Services(@Service, @Params)
|
||||
#pragma precomp SRP_PreCompiler
|
||||
|
||||
$insert LOGICAL
|
||||
$Insert SERVICE_SETUP
|
||||
$insert APP_INSERTS
|
||||
$Insert OVERRIDE_LOG_EQUATES
|
||||
|
||||
Declare function Datetime, NextKey, Error_Services, SRP_Datetime
|
||||
@ -22,9 +23,10 @@ Options OVERRIDE_TYPES = 'ROTR_BLOCK,UNSIGN,CLEAN_INSP,REACTOR_PROVE_IN,REAC
|
||||
|
||||
Service Create(Table, Key, OverrideUser, OverrideComment, OverrideType=OVERRIDE_TYPES, OverrideCause='')
|
||||
|
||||
RecKey = ''
|
||||
ErrorMsg = ''
|
||||
RecKey = ''
|
||||
for each TableName in Table using @VM setting TablePos
|
||||
RecKey<1,-1> = Nextkey('OVERRIDE_LOG')
|
||||
RecKey = Nextkey('OVERRIDE_LOG')
|
||||
orRec = ''
|
||||
orRec<OVERRIDE_LOG_TABLE$> = Table<1, TablePos>
|
||||
orRec<OVERRIDE_LOG_KEY$> = Key<1, TablePos>
|
||||
@ -45,6 +47,7 @@ Service Create(Table, Key, OverrideUser, OverrideComment, OverrideType=OVERRIDE_
|
||||
|
||||
End Service
|
||||
|
||||
|
||||
Service GetOverrideLogKeys(EntityId, Table, Type, User, DateTimeFrom, DateTimeTo)
|
||||
|
||||
If DateTimeFrom EQ '' OR Not(Num(DateTimeFrom)) Or DateTimeFrom GT DateTimeTo then
|
||||
@ -77,7 +80,6 @@ Service GetOverrideLogKeys(EntityId, Table, Type, User, DateTimeFrom, DateTimeTo
|
||||
Error_Services('Add', 'Error in ' : service : ' unable to open OVERRIDE_LOG dictionary.')
|
||||
end
|
||||
Response = keylist
|
||||
|
||||
end service
|
||||
|
||||
|
||||
|
||||
|
@ -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 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 Override_Services, Reactor_Services, Lot_Services
|
||||
Declare subroutine Override_Services, Reactor_Services, Lot_Services, Mona_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 Min, Max, SRPSendMail, Btree.Extract, GetTickCount, HTTPClient_Services, Obj_RDS, SQL_Services
|
||||
@ -177,6 +177,13 @@ 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'
|
||||
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
|
||||
Error_Services('Set', Service : ' is not a valid service request within the ' : ServiceModule : ' services module.')
|
||||
end
|
||||
@ -229,12 +236,6 @@ Service CalculateHgCVData(Datapoints)
|
||||
Min = Min(Min, DataPoint)
|
||||
Max = Max(Max, DataPoint)
|
||||
// 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
|
||||
// Range %
|
||||
Locate Index in RangePoints using ',' setting unusedIndex then
|
||||
@ -256,25 +257,15 @@ Service CalculateHgCVData(Datapoints)
|
||||
EdgeMean4mm = Edge4mmSum / 4
|
||||
EdgeMean10mm = Edge10mmSum / 4
|
||||
If EdgeMean10mm GT 0 then
|
||||
* Delta1Avg = Delta1/4
|
||||
* Delta2Avg = Delta2/4
|
||||
EdgeMeanDelta = ( (Edge4mmSum - Edge10mmSum) / Edge10mmSum) * 100 ; // Changed divisor to Delta2Avg to match SPC - DJS
|
||||
|
||||
// Range %
|
||||
Range = RangeMax - RangeMin
|
||||
NumRangePoints = DCount(RangePoints, ',')
|
||||
RangeAvg = RangeAvg / NumRangePoints
|
||||
RangePct = (Range / RangeAvg) * 100
|
||||
|
||||
* EdgeMeanDelta = OConv(IConv(EdgeMeanDelta, 'MD3L'), 'MD3L')
|
||||
* RangePct = OConv(IConv(RangePct, 'MD3L'), 'MD3L')
|
||||
end
|
||||
// Average
|
||||
Average = Sum / NumDataPoints
|
||||
* Average = OConv(IConv(Average, 'MD3L'), 'MD3L')
|
||||
* Min = OConv(IConv(Min, 'MD3L'), 'MD3L')
|
||||
* Max = OConv(IConv(Max, 'MD3L'), 'MD3L')
|
||||
|
||||
Average = Sum / NumDataPoints
|
||||
FullAvg = ''
|
||||
TotalDataPoints = DCount(DataPoints, @VM)
|
||||
If TotalDataPoints GT 0 then FullAvg = Sum(DataPoints)/DCount(DataPoints, @VM)
|
||||
@ -361,25 +352,18 @@ Service PostROTRRequest(RDSNo)
|
||||
If Flag EQ 0 then
|
||||
If RequestKeyID EQ '' then
|
||||
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()
|
||||
RequestTime = Time()
|
||||
RequestKeyID = RDSNo:'*':RequestDate :'*':RequestTime
|
||||
RequestRow = ''
|
||||
Database_Services('WriteDataRow', 'ROTR_REQUESTS', RequestKeyID, RequestRow, True$, False$, True$)
|
||||
If Error_Services('NoError') then
|
||||
// Log success
|
||||
LogData<3> = 'Successfully posted ROTR request for ':RDSNo:'.'
|
||||
Logging_Services('AppendLog', objErrorLog, LogData, @RM, @FM)
|
||||
end else
|
||||
ErrorMessage = Error_Services('GetMessage')
|
||||
end
|
||||
end else
|
||||
ErrorMessage = 'FQA signed for RDS ':RDSNo:' ignoring ROTR request.'
|
||||
end
|
||||
RequestDate = Date()
|
||||
RequestTime = Time()
|
||||
RequestKeyID = RDSNo:'*':RequestDate :'*':RequestTime
|
||||
RequestRow = ''
|
||||
Database_Services('WriteDataRow', 'ROTR_REQUESTS', RequestKeyID, RequestRow, True$, False$, True$)
|
||||
If Error_Services('NoError') then
|
||||
// Log success
|
||||
LogData<3> = 'Successfully posted ROTR request for ':RDSNo:'.'
|
||||
Logging_Services('AppendLog', objErrorLog, LogData, @RM, @FM)
|
||||
end else
|
||||
ErrorMessage = Error_Services('GetMessage')
|
||||
end
|
||||
end else
|
||||
ErrorMessage = 'Duplicate request found for RDS ':RDSNo:'. Request ignored.'
|
||||
end
|
||||
@ -510,13 +494,6 @@ Service ProcessROTRRequest(RDSNo)
|
||||
Swap @FM with ',' in ResponseCopy
|
||||
LogData<3> = 'ROTR Status response: ':Response
|
||||
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_REASON$> = Response<2>
|
||||
CIRec<CLEAN_INSP_ROTR_REACTOR_NCR_COUNT$> = Response<3>
|
||||
@ -524,7 +501,6 @@ Service ProcessROTRRequest(RDSNo)
|
||||
CIRec<CLEAN_INSP_ROTR_REACTOR_UCL_EXCEEDED_RUN_COUNT$> = Response<5>
|
||||
// Set ROTR Update Flag to trigger CLEAN_INSP_ACTIONS routine (via BASE_MFS).
|
||||
// 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$)
|
||||
end else
|
||||
ErrorMessage = 'Error in service ':Service:'. Failed to retrieve ROTR status. Error message: ':Error_Services('GetMessage')
|
||||
@ -569,6 +545,7 @@ end service
|
||||
//
|
||||
//----------------------------------------------------------------------------------------------------------------------
|
||||
Service GetROTRStatus(RDSKey)
|
||||
|
||||
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSKey)
|
||||
WONo = RDSRec<RDS_WO$>
|
||||
RDSCassNo = RDSRec<RDS_CASS_NO$>
|
||||
@ -1218,12 +1195,7 @@ Service ProcessWaferImageRequests()
|
||||
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
|
||||
WaferNo = Fmt(TrimF(WaferNo), 'R(0)#2')
|
||||
Query = "DECLARE @RDS varchar(10) " |
|
||||
: "DECLARE @RECIPE varchar(30) " |
|
||||
: "DECLARE @WFRID varchar(10) " |
|
||||
@ -1245,7 +1217,7 @@ Service ProcessWaferImageRequests()
|
||||
InsertDate = InsertDTM[1, 'F ']
|
||||
Year = Field(InsertDate, '/', 3, 1)
|
||||
WorkWeek = 'WW':Date_Services('GetWeekNum', InsertDate)
|
||||
PDFPath = WaferMapRoot:'_\':Year:'\':WorkWeek:'\':AttachmentID:'\image.pdf'
|
||||
PDFPath = WaferMapRoot:'\':Year:'\':WorkWeek:'\':AttachmentID:'\image.pdf'
|
||||
Set_Status(0)
|
||||
PDFFile = ''
|
||||
OSRead PDFFile from PDFPath then
|
||||
@ -1292,100 +1264,6 @@ Service ProcessWaferImageRequests()
|
||||
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
|
||||
//
|
||||
@ -1753,9 +1631,7 @@ Service ROTRImpactReport()
|
||||
column = OleGetProperty( xlSht, 'Range' , 'K:K' )
|
||||
OlePutProperty( column , 'ColumnWidth' , '15' )
|
||||
OlePutProperty( column , 'NumberFormat' , '0.0%' )
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
end service
|
||||
@ -1802,6 +1678,8 @@ end service
|
||||
// False$ otherwise.
|
||||
//----------------------------------------------------------------------------------------------------------------------
|
||||
Service PreEpiSignatureReady(RDSNo, Username, WaferQty, Reactor)
|
||||
StartTick = GetTickCount()
|
||||
MetricName = 'PreEpiSignatureReady'
|
||||
|
||||
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.'
|
||||
@ -1900,6 +1778,8 @@ Service PreEpiSignatureReady(RDSNo, Username, WaferQty, Reactor)
|
||||
Response = False$
|
||||
end
|
||||
|
||||
EndTick = GetTickCount()
|
||||
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
|
||||
end service
|
||||
|
||||
|
||||
@ -1916,6 +1796,8 @@ end service
|
||||
// Reponse - True$ if PRE stage was successfully signed, False$ otherwise.
|
||||
//----------------------------------------------------------------------------------------------------------------------
|
||||
Service SignPreEpiStage(RDSNo, Username, WaferQty, Reactor, ScanEntry)
|
||||
StartTick = GetTickCount()
|
||||
MetricName = 'SignPreEpiStage'
|
||||
|
||||
Error_Services('Clear')
|
||||
If (RDSNo EQ '') or (Username EQ '') or (WaferQty EQ '') or (Reactor EQ '') then
|
||||
@ -1967,71 +1849,66 @@ Service SignPreEpiStage(RDSNo, Username, WaferQty, Reactor, ScanEntry)
|
||||
|
||||
PreEpiSig = RDSRec<RDS_PRE_EPI_SIG$>
|
||||
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
|
||||
|
||||
WOMatKey = WONo:'*':CassNo
|
||||
WOMatRec = Database_Services('ReadDataRow', 'WO_MAT', WOMatKey)
|
||||
WOMatSigProfile = WOMatRec<WO_MAT_SIG_PROFILE$>
|
||||
SigAction = WOStep:'VER'
|
||||
WOMatKey = WONo:'*':CassNo
|
||||
WOMatRec = Database_Services('ReadDataRow', 'WO_MAT', WOMatKey)
|
||||
WOMatSigProfile = WOMatRec<WO_MAT_SIG_PROFILE$>
|
||||
SigAction = WOStep:'VER'
|
||||
|
||||
LOCATE SigAction IN WOMatSigProfile USING @VM SETTING Pos THEN
|
||||
WOMatSig = WOMatRec<WO_MAT_SIGNATURE$,Pos>
|
||||
CurrDTM = OCONV(WOMatRec<WO_MAT_SIG_DTM$,Pos>,'DT/4^HS')
|
||||
END ELSE
|
||||
WOMatSig = ''
|
||||
END
|
||||
LOCATE SigAction IN WOMatSigProfile USING @VM SETTING Pos THEN
|
||||
WOMatSig = WOMatRec<WO_MAT_SIGNATURE$,Pos>
|
||||
CurrDTM = OCONV(WOMatRec<WO_MAT_SIG_DTM$,Pos>,'DT/4^HS')
|
||||
END ELSE
|
||||
WOMatSig = ''
|
||||
END
|
||||
|
||||
RDSSig = PreEpiSig
|
||||
RDSSig = PreEpiSig
|
||||
|
||||
BEGIN CASE
|
||||
CASE (WOMatSig EQ '') AND (RDSSig NE '')
|
||||
BEGIN CASE
|
||||
CASE (WOMatSig EQ '') AND (RDSSig NE '')
|
||||
|
||||
* Signature missing on WO_MAT
|
||||
SigDate = RDSRec<RDS_PRE_EPI_SIG_DATE$>
|
||||
SigTime = RDSRec<RDS_PRE_EPI_SIG_TIME$>
|
||||
owmParms = WONo:@RM:CassNo:@RM:WOStep:@RM:'VER':@RM:RDSSig:@RM:SigDate:' ':SigTime
|
||||
* Sets VER signature
|
||||
* obj_WO_Mat('SetSignature',owmParms)
|
||||
errCode = ''
|
||||
IF Get_Status(errCode) THEN
|
||||
ErrorMsg = 'Process Error: Error calling Obj_WO_Mat("SetSignature") within ':Service:'. Error code: ':errCode
|
||||
Error_Services('Set', ErrorMsg)
|
||||
Response = False$
|
||||
END else
|
||||
Response = True$
|
||||
end
|
||||
return
|
||||
* Signature missing on WO_MAT
|
||||
SigDate = RDSRec<RDS_PRE_EPI_SIG_DATE$>
|
||||
SigTime = RDSRec<RDS_PRE_EPI_SIG_TIME$>
|
||||
owmParms = WONo:@RM:CassNo:@RM:WOStep:@RM:'VER':@RM:RDSSig:@RM:SigDate:' ':SigTime
|
||||
* Sets VER signature
|
||||
errCode = ''
|
||||
IF Get_Status(errCode) THEN
|
||||
ErrorMsg = 'Process Error: Error calling Obj_WO_Mat("SetSignature") within ':Service:'. Error code: ':errCode
|
||||
Error_Services('Set', ErrorMsg)
|
||||
Response = False$
|
||||
END else
|
||||
Response = True$
|
||||
end
|
||||
return
|
||||
|
||||
CASE (RDSSig = '') AND (WOMatSig NE '')
|
||||
CASE (RDSSig = '') AND (WOMatSig NE '')
|
||||
|
||||
* Signature missing on RDS
|
||||
CurrDate = CurrDTM[1,' ']
|
||||
CurrTime = CurrDTM[COL2()+1,' ']
|
||||
RDSRec<RDS_PRE_EPI_SIG$> = WOMatSig
|
||||
RDSRec<RDS_PRE_EPI_SIG_DATE$> = IConv(CurrDate, 'D')
|
||||
RDSRec<RDS_PRE_EPI_SIG_TIME$> = IConv(CurrTime, 'MT')
|
||||
Database_Services('WriteDataRow', 'RDS', RDSNo, RDSRec, True$, False$, True$)
|
||||
Response = True$
|
||||
return
|
||||
* Signature missing on RDS
|
||||
CurrDate = CurrDTM[1,' ']
|
||||
CurrTime = CurrDTM[COL2()+1,' ']
|
||||
RDSRec<RDS_PRE_EPI_SIG$> = WOMatSig
|
||||
RDSRec<RDS_PRE_EPI_SIG_DATE$> = IConv(CurrDate, 'D')
|
||||
RDSRec<RDS_PRE_EPI_SIG_TIME$> = IConv(CurrTime, 'MT')
|
||||
Database_Services('WriteDataRow', 'RDS', RDSNo, RDSRec, True$, False$, True$)
|
||||
Response = True$
|
||||
return
|
||||
|
||||
CASE RDSSig NE '' AND WOMatSig NE ''
|
||||
CASE RDSSig NE '' AND WOMatSig NE ''
|
||||
|
||||
ErrorMessage = 'Process Error: Pre Epi stage has already been signed.'
|
||||
Error_Services('Set', ErrorMessage)
|
||||
Response = False$
|
||||
return
|
||||
ErrorMessage = 'Process Error: Pre Epi stage has already been signed.'
|
||||
Error_Services('Set', ErrorMessage)
|
||||
Response = False$
|
||||
return
|
||||
|
||||
CASE Otherwise$
|
||||
Null
|
||||
CASE Otherwise$
|
||||
Null
|
||||
|
||||
END CASE
|
||||
END CASE
|
||||
|
||||
END ;* End of check for Reactor Type
|
||||
|
||||
* END
|
||||
END ;* End of check for Reactor Type
|
||||
|
||||
SigDate = OCONV( Date(), 'D2/' )
|
||||
SigTime = OCONV( Time(), 'MTS' )
|
||||
@ -2045,7 +1922,6 @@ Service SignPreEpiStage(RDSNo, Username, WaferQty, Reactor, ScanEntry)
|
||||
|
||||
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
|
||||
ErrorMessage = 'Process Error: Error calling obj_WO_Mat("SetSignature"). Error code: ':errCode
|
||||
Error_Services('Set', ErrorMessage)
|
||||
@ -2099,6 +1975,8 @@ Service SignPreEpiStage(RDSNo, Username, WaferQty, Reactor, ScanEntry)
|
||||
Response = False$
|
||||
end
|
||||
|
||||
EndTick = GetTickCount()
|
||||
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
|
||||
end service
|
||||
|
||||
|
||||
@ -2118,6 +1996,8 @@ end service
|
||||
// False$ otherwise.
|
||||
//----------------------------------------------------------------------------------------------------------------------
|
||||
Service LoadSignatureReady(RDSNo, Username, WaferQty, LLSide, PreFlag, ReactNoOpt)
|
||||
StartTick = GetTickCount()
|
||||
MetricName = 'LoadSignatureReady'
|
||||
|
||||
Error_Services('Clear')
|
||||
If (RDSNo EQ '') or (Username EQ '') or (WaferQty EQ '') then
|
||||
@ -2210,16 +2090,8 @@ Service LoadSignatureReady(RDSNo, Username, WaferQty, LLSide, PreFlag, ReactNoOp
|
||||
return
|
||||
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
|
||||
|
||||
IF Supplement NE True$ then
|
||||
ErrorMsg = 'Process Error: Recipe parameters are out of spec and no supplement has been set.'
|
||||
Error_Services('Set', ErrorMsg)
|
||||
@ -2234,13 +2106,6 @@ Service LoadSignatureReady(RDSNo, Username, WaferQty, LLSide, PreFlag, ReactNoOp
|
||||
return
|
||||
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
|
||||
//Load Lock Required Check
|
||||
LoadLockReq = Xlate('REACTOR', Reactor, REACTOR_PICK_PLACE$, 'X');
|
||||
@ -2314,49 +2179,26 @@ Service LoadSignatureReady(RDSNo, Username, WaferQty, LLSide, PreFlag, ReactNoOp
|
||||
Return
|
||||
END
|
||||
|
||||
* IF ReactorType NE 'EPP' THEN
|
||||
If PreFlag EQ True$ then
|
||||
// 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.
|
||||
Stage = 'VER'
|
||||
end else
|
||||
Stage = 'LOAD'
|
||||
end
|
||||
|
||||
If PreFlag EQ True$ then
|
||||
// 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.
|
||||
Stage = 'VER'
|
||||
end else
|
||||
Stage = 'LOAD'
|
||||
end
|
||||
If ReactorType EQ 'EPP' then
|
||||
WOMatKey = ''
|
||||
end else
|
||||
WOMatKey = WONo:'*':CassNo
|
||||
end
|
||||
|
||||
If ReactorType EQ 'EPP' then
|
||||
WOMatKey = ''
|
||||
end else
|
||||
WOMatKey = WONo:'*':CassNo
|
||||
end
|
||||
Signature_Services('CheckSigOrder', WOMatKey, Stage, False$, RDSNo)
|
||||
|
||||
Signature_Services('CheckSigOrder', WOMatKey, Stage, False$, RDSNo)
|
||||
|
||||
If Error_Services('HasError') then
|
||||
Response = False$
|
||||
Return
|
||||
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
|
||||
If Error_Services('HasError') then
|
||||
Response = False$
|
||||
Return
|
||||
end
|
||||
|
||||
SigDate = RDSRec<RDS_PRE_EPI_SIG_DATE$>
|
||||
SigTime = RDSrec<RDS_PRE_EPI_SIG_TIME$>
|
||||
@ -2402,9 +2244,13 @@ Service LoadSignatureReady(RDSNo, Username, WaferQty, LLSide, PreFlag, ReactNoOp
|
||||
Response = False$
|
||||
end
|
||||
|
||||
EndTick = GetTickCount()
|
||||
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
|
||||
end service
|
||||
|
||||
|
||||
Service LoadExtra1stReady(RDSNo)
|
||||
|
||||
Response = False$
|
||||
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo)
|
||||
StandardLoadSignature = RDSRec<RDS_OPERATOR_IN$>
|
||||
@ -2416,9 +2262,12 @@ Service LoadExtra1stReady(RDSNo)
|
||||
If StandardLoadSignature NE '' AND UnloadExtra1Signature NE '' AND LoadExtra1Signature EQ '' And LoadExtra2Signature EQ ''AND UnloadExtra2Signature EQ '' and StandardUnloadSignature EQ '' then
|
||||
Response = True$
|
||||
end
|
||||
|
||||
end service
|
||||
|
||||
|
||||
Service UnsignLoadExtra1stReady(RDSNo)
|
||||
|
||||
Response = False$
|
||||
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo)
|
||||
StandardLoadSignature = RDSRec<RDS_OPERATOR_IN$>
|
||||
@ -2435,7 +2284,9 @@ Service UnsignLoadExtra1stReady(RDSNo)
|
||||
|
||||
end service
|
||||
|
||||
|
||||
Service LoadExtra2ndReady(RDSNo)
|
||||
|
||||
Response = False$
|
||||
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo)
|
||||
StandardLoadSignature = RDSRec<RDS_OPERATOR_IN$>
|
||||
@ -2447,9 +2298,12 @@ Service LoadExtra2ndReady(RDSNo)
|
||||
If StandardLoadSignature NE '' AND UnloadExtra1Signature NE '' AND LoadExtra1Signature NE '' AND UnloadExtra2Signature NE '' And LoadExtra2Signature EQ '' and StandardUnloadSignature EQ '' then
|
||||
Response = True$
|
||||
end
|
||||
|
||||
end service
|
||||
|
||||
|
||||
Service UnsignLoadExtra2ndReady(RDSNo)
|
||||
|
||||
Response = False$
|
||||
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo)
|
||||
StandardLoadSignature = RDSRec<RDS_OPERATOR_IN$>
|
||||
@ -2463,8 +2317,10 @@ Service UnsignLoadExtra2ndReady(RDSNo)
|
||||
Response = True$
|
||||
end
|
||||
end
|
||||
|
||||
end service
|
||||
|
||||
|
||||
//----------------------------------------------------------------------------------------------------------------------
|
||||
// SignLoadStage
|
||||
//
|
||||
@ -2478,6 +2334,8 @@ end service
|
||||
// False$ otherwise.
|
||||
//----------------------------------------------------------------------------------------------------------------------
|
||||
Service SignLoadStage(RDSNo, Username, WaferQty, LLSide, ScanEntry)
|
||||
StartTick = GetTickCount()
|
||||
MetricName = 'SignLoadStage'
|
||||
|
||||
Error_Services('Clear')
|
||||
If (RDSNo EQ '') or (Username EQ '') or (WaferQty EQ '') then
|
||||
@ -2685,6 +2543,8 @@ Service SignLoadStage(RDSNo, Username, WaferQty, LLSide, ScanEntry)
|
||||
Response = False$
|
||||
end
|
||||
|
||||
EndTick = GetTickCount()
|
||||
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
|
||||
end service
|
||||
|
||||
|
||||
@ -2700,6 +2560,8 @@ end service
|
||||
// False$ otherwise.
|
||||
//----------------------------------------------------------------------------------------------------------------------
|
||||
Service UnloadSignatureReady(RDSNo, Username, Reactor)
|
||||
StartTick = GetTickCount()
|
||||
MetricName = 'UnloadSignatureReady'
|
||||
|
||||
If (RDSNo EQ '') or (Username EQ '') or (Reactor EQ '') then
|
||||
ErrorMsg = 'RDSNo or Username or Reactor not supplied in the ':Service:' service.'
|
||||
@ -2749,39 +2611,17 @@ Service UnloadSignatureReady(RDSNo, Username, Reactor)
|
||||
end
|
||||
ReactorType = XLATE('RDS',RDSNo,'REACTOR_TYPE','X')
|
||||
|
||||
If ReactorType EQ 'EPP' then
|
||||
WOMatKey = ''
|
||||
end else
|
||||
WOMatKey = WONo:'*':CassNo
|
||||
end
|
||||
|
||||
* IF ReactorType NE 'EPP' THEN
|
||||
|
||||
|
||||
If ReactorType EQ 'EPP' then
|
||||
WOMatKey = ''
|
||||
end else
|
||||
WOMatKey = WONo:'*':CassNo
|
||||
end
|
||||
|
||||
Signature_Services('CheckSigOrder', WOMatKey, 'UNLOAD', RDSNo)
|
||||
If Error_Services('HasError') then
|
||||
Response = False$
|
||||
return
|
||||
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
|
||||
Signature_Services('CheckSigOrder', WOMatKey, 'UNLOAD', RDSNo)
|
||||
If Error_Services('HasError') then
|
||||
Response = False$
|
||||
return
|
||||
end
|
||||
|
||||
LWIInstAckReq = Xlate('RDS', RDSNo, 'LWI_INST_ACK_REQ', 'X')
|
||||
If LWIInstAckReq EQ True$ then
|
||||
@ -2799,7 +2639,6 @@ Service UnloadSignatureReady(RDSNo, Username, Reactor)
|
||||
return
|
||||
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
|
||||
IF RDSRec<RDS_OP_OUT_EX1_DATE$> <> '' THEN
|
||||
IF RDSRec<RDS_OP_IN_EX2_DATE$> = '' THEN
|
||||
@ -2869,9 +2708,13 @@ Service UnloadSignatureReady(RDSNo, Username, Reactor)
|
||||
Response = False$
|
||||
end
|
||||
|
||||
EndTick = GetTickCount()
|
||||
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
|
||||
end service
|
||||
|
||||
|
||||
Service UnloadExtra1stReady(RDSNo)
|
||||
|
||||
Response = False$
|
||||
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo)
|
||||
StandardLoadSignature = RDSRec<RDS_OPERATOR_IN$>
|
||||
@ -2883,9 +2726,12 @@ Service UnloadExtra1stReady(RDSNo)
|
||||
If StandardLoadSignature NE '' AND UnloadExtra1Signature EQ '' AND LoadExtra1Signature EQ '' AND UnloadExtra2Signature EQ '' And LoadExtra2Signature eq '' and StandardUnloadSignature EQ '' then
|
||||
Response = True$
|
||||
end
|
||||
|
||||
end service
|
||||
|
||||
|
||||
Service UnloadExtra2ndReady(RDSNo)
|
||||
|
||||
Response = False$
|
||||
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo)
|
||||
StandardLoadSignature = RDSRec<RDS_OPERATOR_IN$>
|
||||
@ -2897,9 +2743,12 @@ Service UnloadExtra2ndReady(RDSNo)
|
||||
If StandardLoadSignature NE '' AND UnloadExtra1Signature NE '' AND LoadExtra1Signature NE '' And LoadExtra2Signature EQ ''AND UnloadExtra2Signature EQ '' and StandardUnloadSignature EQ '' then
|
||||
Response = True$
|
||||
end
|
||||
|
||||
end service
|
||||
|
||||
|
||||
Service UnsignUnloadExtra1stReady(RDSNo)
|
||||
|
||||
Response = False$
|
||||
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo)
|
||||
StandardLoadSignature = RDSRec<RDS_OPERATOR_IN$>
|
||||
@ -2916,7 +2765,9 @@ Service UnsignUnloadExtra1stReady(RDSNo)
|
||||
|
||||
end service
|
||||
|
||||
|
||||
Service UnsignUnloadExtra2ndReady(RDSNo)
|
||||
|
||||
Response = False$
|
||||
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo)
|
||||
StandardLoadSignature = RDSRec<RDS_OPERATOR_IN$>
|
||||
@ -2930,6 +2781,7 @@ Service UnsignUnloadExtra2ndReady(RDSNo)
|
||||
Response = True$
|
||||
end
|
||||
end
|
||||
|
||||
end service
|
||||
|
||||
|
||||
@ -2944,6 +2796,9 @@ end service
|
||||
// Response - True$ if UNLOAD stage was successfully signed , False$ otherwise.
|
||||
//----------------------------------------------------------------------------------------------------------------------
|
||||
Service SignUnloadStage(RDSNo, Username, ScanEntry)
|
||||
StartTick = GetTickCount()
|
||||
MetricName = 'SignUnloadStage'
|
||||
|
||||
If (RDSNo EQ '') or (Username EQ '') then
|
||||
ErrorMsg = 'RDSNo or Username not supplied in the ':Service:' service.'
|
||||
Error_Services('Add', ErrorMsg)
|
||||
@ -3016,7 +2871,6 @@ Service SignUnloadStage(RDSNo, Username, ScanEntry)
|
||||
|
||||
* 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
|
||||
* obj_WO_Mat('SetSignature',owmParms)
|
||||
|
||||
IF Get_Status(errCode) THEN
|
||||
ErrorMsg = 'Process Error: Error calling Obj_WO_Mat("SetSignature") within the ':Service:' service'
|
||||
@ -3050,9 +2904,6 @@ Service SignUnloadStage(RDSNo, Username, ScanEntry)
|
||||
|
||||
obj_React_Status('CassUnload',Reactor:@RM:WONo:@RM:CassNo:@RM:UnloadDTM:@RM:RDSNo)
|
||||
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<1> = LoggingDTM
|
||||
LogData<2> = @User4
|
||||
@ -3068,7 +2919,6 @@ Service SignUnloadStage(RDSNo, Username, ScanEntry)
|
||||
InCassettes = RDSRec<RDS_IN_CASS_NO$>
|
||||
InCassettes = SRP_Array('Clean', InCassettes, 'TrimAndMakeUnique', @VM)
|
||||
obj_React_Status('ReactorUnload',Reactor:@RM:WONo:@RM:InCassettes:@RM:UnloadDTM:@RM:RDSNo)
|
||||
//Reactor_Services('IncrementWfrMetrics', RDSNo)
|
||||
end
|
||||
|
||||
RDSRec<RDS_OPERATOR_OUT$> = SigBy
|
||||
@ -3141,6 +2991,8 @@ Service SignUnloadStage(RDSNo, Username, ScanEntry)
|
||||
Response = False$
|
||||
end
|
||||
|
||||
EndTick = GetTickCount()
|
||||
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
|
||||
end service
|
||||
|
||||
|
||||
@ -3475,97 +3327,9 @@ Service SignFQAStage(RDSNo, Username)
|
||||
NEXT Index
|
||||
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 *
|
||||
*************************
|
||||
! 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}
|
||||
WafersOut = {WFRS_OUT}
|
||||
|
||||
@ -3585,23 +3349,18 @@ Service SignFQAStage(RDSNo, Username)
|
||||
|
||||
end
|
||||
|
||||
|
||||
*********************************
|
||||
* 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)
|
||||
If NCRStatus EQ False$ then
|
||||
If NOT( MemberOf(Username, 'LEAD') OR MemberOf(Username, 'SUPERVISOR') ) then
|
||||
ErrorMsg = 'Unable to sign FQA because the total quantity of NCR wafers is less than the '|
|
||||
: 'number of wafers above the USL threshold. A lead or supervisor must override.'
|
||||
Error_Services('Add', ErrorMsg)
|
||||
return
|
||||
end
|
||||
end
|
||||
end
|
||||
NCRStatus = QA_Services('GetNCRStatus', RDSNo)
|
||||
If NCRStatus EQ False$ then
|
||||
If NOT( MemberOf(Username, 'LEAD') OR MemberOf(Username, 'SUPERVISOR') ) then
|
||||
ErrorMsg = 'Unable to sign FQA because the total quantity of NCR wafers is less than the '|
|
||||
: 'number of wafers above the USL threshold. A lead or supervisor must override.'
|
||||
Error_Services('Add', ErrorMsg)
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
*************************
|
||||
* Verify if Shift exist *
|
||||
@ -3663,21 +3422,19 @@ Service SignFQAStage(RDSNo, Username)
|
||||
Next Test
|
||||
|
||||
******************************************
|
||||
* Verify Unload Stage QA Metrology Tests * On hold until approved for release to production
|
||||
* Verify Unload Stage QA Metrology Tests *
|
||||
******************************************
|
||||
If Username EQ 'FRANCOIS_R' then
|
||||
WONo = {WO}
|
||||
CassNo = {CASS_NO}
|
||||
WOMatQAKey = WONo : '*' : CassNo
|
||||
WOMatQARec = Database_Services('ReadDataRow', 'WO_MAT_QA', WOMatQAKey)
|
||||
OutOfSpec = WOMatQARec<WO_MAT_QA_OUT_OF_SPEC$>
|
||||
OutOfSpec = Sum(OutOfSpec)
|
||||
If OutOfSpec GT 0 then
|
||||
ErrorMsg = 'Process Error: One or more Unload QA Metrology results are out of specification.'
|
||||
Error_Services('Add', ErrorMsg)
|
||||
return
|
||||
end
|
||||
end
|
||||
WONo = {WO}
|
||||
CassNo = {CASS_NO}
|
||||
WOMatQAKey = WONo : '*' : CassNo
|
||||
WOMatQARec = Database_Services('ReadDataRow', 'WO_MAT_QA', WOMatQAKey)
|
||||
OutOfSpec = WOMatQARec<WO_MAT_QA_OUT_OF_SPEC$>
|
||||
OutOfSpec = Sum(OutOfSpec)
|
||||
If OutOfSpec GT 0 then
|
||||
ErrorMsg = 'Process Error: One or more Unload QA Metrology results are out of specification.'
|
||||
Error_Services('Add', ErrorMsg)
|
||||
return
|
||||
end
|
||||
|
||||
*******************************************
|
||||
* Verify if all steps have been completed *
|
||||
@ -3750,8 +3507,6 @@ Service SignFQAStage(RDSNo, Username)
|
||||
;* 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
|
||||
|
||||
* obj_WO_Mat('SetSignature',owmParms) ; * * * * * S I G N A T U R E * * * * * *
|
||||
|
||||
IF Get_Status(errCode) THEN
|
||||
ErrorMsg = 'Error calling Obj_WO_Mat("SetSignature") within ':Service:'. Error code: ':errCode
|
||||
Error_Services('Add', ErrorMsg)
|
||||
@ -3888,3 +3643,4 @@ ClearCursors:
|
||||
|
||||
return
|
||||
|
||||
|
||||
|
@ -254,26 +254,23 @@ Event SIGN_BUTTON.CLICK()
|
||||
end
|
||||
|
||||
RDSNo = Get_Property(@Window : '.RDS_NO','DEFPROP')
|
||||
WCCheckEnabled = Xlate('APP_INFO', 'WAFER_COUNTER_CHECK', '', 'X')
|
||||
If WCCheckEnabled then
|
||||
****************************************
|
||||
* Verify the Wafer Counter information *
|
||||
****************************************
|
||||
WafersOut = Get_Property(@WINDOW:'.WAFERS_OUT','TEXT')
|
||||
WaferCounterQty = Get_Property(@WINDOW:'.EDL_WAFER_COUNTER_QTY','DEFPROP')
|
||||
****************************************
|
||||
* Verify the Wafer Counter information *
|
||||
****************************************
|
||||
WafersOut = Get_Property(@WINDOW:'.WAFERS_OUT','TEXT')
|
||||
WaferCounterQty = Get_Property(@WINDOW:'.EDL_WAFER_COUNTER_QTY','DEFPROP')
|
||||
|
||||
*************************************
|
||||
* Wafer Counter - Quantity Section *
|
||||
*************************************
|
||||
If (WaferCounterQty NE '') then
|
||||
If (WaferCounterQty NE WafersOut) then
|
||||
ErrMsg('Unable to sign FQA because Wafer Counter and Wafers Out quantities do not match.')
|
||||
RETURN 0
|
||||
end
|
||||
end else
|
||||
ErrMsg('Unable to sign FQA because the Wafer Counter quantity is missing.')
|
||||
*************************************
|
||||
* Wafer Counter - Quantity Section *
|
||||
*************************************
|
||||
If (WaferCounterQty NE '') then
|
||||
If (WaferCounterQty NE WafersOut) then
|
||||
ErrMsg('Unable to sign FQA because Wafer Counter and Wafers Out quantities do not match.')
|
||||
RETURN 0
|
||||
end
|
||||
end else
|
||||
ErrMsg('Unable to sign FQA because the Wafer Counter quantity is missing.')
|
||||
RETURN 0
|
||||
end
|
||||
|
||||
***********************************
|
||||
@ -446,26 +443,21 @@ Event SIGN_BUTTON.CLICK()
|
||||
******************************************
|
||||
* Verify Unload Stage QA Metrology Tests *
|
||||
******************************************
|
||||
|
||||
DevelopmentFlag = Xlate('DEVELOPMENT', 'HGCV', 'STATUS', 'X')
|
||||
|
||||
If (DevelopmentFlag EQ True$) then
|
||||
WONo = Get_Property(@WINDOW:'.WO','DEFPROP')
|
||||
CassNo = Get_Property(@WINDOW:'.CASS_NO','DEFPROP')
|
||||
WOMatQAKey = WONo : '*' : CassNo
|
||||
WOMatQARec = Database_Services('ReadDataRow', 'WO_MAT_QA', WOMatQAKey)
|
||||
OutOfSpec = WOMatQARec<WO_MAT_QA_OUT_OF_SPEC$>
|
||||
OutOfSpec = Sum(OutOfSpec)
|
||||
If OutOfSpec GT 0 then
|
||||
FailReasons = WOMatQARec<WO_MAT_QA_FAIL_REASON$>
|
||||
ErrorMsg = 'Process Error':@SVM
|
||||
For each FailReason in FailReasons using @VM
|
||||
ErrorMsg := FailReason:CRLF$
|
||||
Next FailReason
|
||||
ErrMsg(ErrorMsg)
|
||||
Return
|
||||
end
|
||||
end
|
||||
WONo = Get_Property(@WINDOW:'.WO','DEFPROP')
|
||||
CassNo = Get_Property(@WINDOW:'.CASS_NO','DEFPROP')
|
||||
WOMatQAKey = WONo : '*' : CassNo
|
||||
WOMatQARec = Database_Services('ReadDataRow', 'WO_MAT_QA', WOMatQAKey)
|
||||
OutOfSpec = WOMatQARec<WO_MAT_QA_OUT_OF_SPEC$>
|
||||
OutOfSpec = Sum(OutOfSpec)
|
||||
If OutOfSpec GT 0 then
|
||||
FailReasons = WOMatQARec<WO_MAT_QA_FAIL_REASON$>
|
||||
ErrorMsg = 'Process Error':@SVM
|
||||
For each FailReason in FailReasons using @VM
|
||||
ErrorMsg := FailReason:CRLF$
|
||||
Next FailReason
|
||||
ErrMsg(ErrorMsg)
|
||||
Return
|
||||
end
|
||||
|
||||
*******************************************
|
||||
* Verify if all steps have been completed *
|
||||
|
@ -84,6 +84,7 @@ $Insert NOTIFICATION_EQUATES
|
||||
$Insert DICT_EQUATES
|
||||
$Insert COMPANY_EQUATES
|
||||
$Insert RETURN_TO_FAB_LOTS_EQUATES
|
||||
$Insert TEST_RUN_EQUATES
|
||||
|
||||
EQU COL$LSID TO 1
|
||||
EQU COL$RECIPE TO 2
|
||||
@ -114,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 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 Rds_Services, Obj_Post_Log
|
||||
Declare subroutine Rds_Services, Obj_Post_Log, Mona_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 Memberof, Obj_WO_Mat, Obj_WO_Mat_Log, SRP_Array, DateTime, Dialog_Box, obj_Prod_Spec
|
||||
@ -130,6 +131,13 @@ Headers = 'Logging DTM':@FM:'Ctrl':@FM:'Load/Calculate Time'
|
||||
objCtrlLog = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, COMMA$, Headers, '', False$, False$)
|
||||
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
|
||||
Error_Services('Set', Service : ' is not a valid service request within the ' : ServiceModule : ' services module.')
|
||||
end
|
||||
@ -225,6 +233,8 @@ End Service
|
||||
// to an RDS record.
|
||||
//----------------------------------------------------------------------------------------------------------------------
|
||||
Service AddComment(RDSNo, Comment, UsernameOpt)
|
||||
StartTick = GetTickCount()
|
||||
MetricName = 'AddComment'
|
||||
|
||||
RDSRow = Database_Services('ReadDataRow', 'RDS', RDSNo)
|
||||
Username = @USER4
|
||||
@ -247,6 +257,8 @@ Service AddComment(RDSNo, Comment, UsernameOpt)
|
||||
oblParms := "TOP" :@VM: "TOP" :@VM: "TOP"
|
||||
obj_Post_Log('Create',oblParms)
|
||||
|
||||
EndTick = GetTickCount()
|
||||
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
|
||||
End Service
|
||||
|
||||
|
||||
@ -749,6 +761,9 @@ Service IsValidSubLot(RDSNo, RDSType, SupplierLot)
|
||||
end service
|
||||
|
||||
Service GetRDSRunHistoryByReactorAndWO(ReactorNo, WO)
|
||||
StartTick = GetTickCount()
|
||||
MetricName = 'GetRDSRunHistoryByReactorAndWO'
|
||||
|
||||
table = "RDS"
|
||||
ErrorMessage = ''
|
||||
RDSRecords = ''
|
||||
@ -782,10 +797,16 @@ Service GetRDSRunHistoryByReactorAndWO(ReactorNo, WO)
|
||||
end
|
||||
Next RDS
|
||||
Response = FinalRDSSortedByAssignmentDTM<1>
|
||||
|
||||
EndTick = GetTickCount()
|
||||
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
|
||||
end service
|
||||
|
||||
|
||||
Service IsTWLoggingReqd(RDSNo)
|
||||
StartTick = GetTickCount()
|
||||
MetricName = 'IsTWLoggingReqd'
|
||||
|
||||
IsTWReqd = False$
|
||||
ExistingTWRuns = Test_Run_Services('GetTestRunKeysByRDS', RDSNo)
|
||||
If ExistingTWRuns EQ '' then
|
||||
@ -808,7 +829,7 @@ Service IsTWLoggingReqd(RDSNo)
|
||||
Layer = Field(PRSPropKey, '*', 2)
|
||||
MeasureFreq = PRSPropRec<PRS_PROP_FREQ$>
|
||||
Start = PRSPropRec<PRS_PROP_MET_START$>
|
||||
If WaferType NE 'Product' AND WaferType NE 'Prod' then
|
||||
If WaferType NE 'Product' AND WaferType NE 'Prod' AND WaferType NE '' then
|
||||
BEGIN CASE
|
||||
CASE MeasureFreq = 'F' AND ThisReactorRunOrder = 1 ; IsTWReqd = 1
|
||||
CASE ThisReactorRunOrder = Start ; IsTWReqd = 1
|
||||
@ -846,6 +867,30 @@ Service IsTWLoggingReqd(RDSNo)
|
||||
IsTWReqd = False$
|
||||
end
|
||||
Response = IsTWReqd
|
||||
|
||||
EndTick = GetTickCount()
|
||||
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
|
||||
end service
|
||||
|
||||
Service TestWaferRanAfterLoad(RDSNo)
|
||||
TestWaferRanAfterLoad = False$
|
||||
TestWaferKeys = Test_Run_Services('GetTestRunKeysByRDS', RDSNo)
|
||||
for each Key in TestWaferKeys using @VM
|
||||
TestWaferDtm = Xlate('TEST_RUN', Key, TEST_RUN_RUN_DTM$, 'X')
|
||||
TestWaferDate = SRP_DateTime('Date', TestWaferDtm)
|
||||
TestWaferTime = SRP_DateTime('Time', TestWaferDtm)
|
||||
|
||||
RdsDateIn = Xlate('RDS', RDSNo, RDS_DATE_IN$, 'X')
|
||||
RdsTimeIn = Xlate('RDS', RDSNo, RDS_TIME_IN$, 'X')
|
||||
|
||||
TestWaferRanAfterLoad = TestWaferDate > RdsDateIn
|
||||
If TestWaferRanAfterLoad EQ False$ then
|
||||
TestWaferRanAfterLoad = (TestWaferDate EQ RdsDateIn) and TestWaferTime GT RdsTimeIn
|
||||
end
|
||||
Until TestWaferRanAfterLoad EQ True$
|
||||
Next Key
|
||||
|
||||
Response = TestWaferRanAfterLoad
|
||||
end service
|
||||
|
||||
//----------------------------------------------------------------------------------------------------------------------
|
||||
@ -1077,6 +1122,8 @@ end service
|
||||
|
||||
|
||||
Service CopyRDSLayerParameters(RDSNo)
|
||||
StartTick = GetTickCount()
|
||||
MetricName = 'CopyRDSLayerParameters'
|
||||
|
||||
If (RDSNo NE '') then
|
||||
RunOrderNo = Xlate('RDS', RDSNo, 'RUN_ORDER_NUM', 'X')
|
||||
@ -1129,6 +1176,8 @@ Service CopyRDSLayerParameters(RDSNo)
|
||||
Error_Services('Add', 'RDSNo not supplied in ':Service:' service.')
|
||||
end
|
||||
|
||||
EndTick = GetTickCount()
|
||||
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
|
||||
end service
|
||||
|
||||
|
||||
@ -1805,3 +1854,6 @@ return
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -277,6 +277,7 @@ Event PUB_SIGN.CLICK()
|
||||
end
|
||||
If (Valid EQ True$) then
|
||||
ReactorType = XLATE('RDS',RDSNo,'REACTOR_TYPE','X')
|
||||
ErrMsg = ''
|
||||
If Len(ReactorType) GE 3 and ReactorType[1, 3] _EQC 'HTR' then
|
||||
WoMatKey = WONo:'*':CassNo
|
||||
IsLastCassetteInWo = WO_MAT_Services('CassetteIsLastInWo', WoMatKey)
|
||||
@ -298,26 +299,44 @@ Event PUB_SIGN.CLICK()
|
||||
WoMatRecord = Database_Services('ReadDataRow', 'WO_MAT', WoMatKey)
|
||||
WoMatRecord<WO_MAT_LAST_CASSETTE_TEST_WAFER_ACK_REQ$> = True$
|
||||
|
||||
Message = ''
|
||||
If NextEventScheduled EQ False$ or NextEventIsBlock EQ True$ then
|
||||
Message = 'No material scheduled. Test wafer required.'
|
||||
end else if NextEventHasSamePsn EQ False$ then
|
||||
Message = 'Next work order is a NEW PSN number. Test wafer required.'
|
||||
TestWaferRanSinceLoad = WoMatRecord<WO_MAT_LAST_CASSETTE_TEST_WAFER_RAN$>
|
||||
|
||||
If TestWaferRanSinceLoad NE True$ then
|
||||
TestWaferRanSinceLoad = Rds_Services('TestWaferRanAfterLoad', RDSNo)
|
||||
WoMatRecord<WO_MAT_LAST_CASSETTE_TEST_WAFER_RAN$> = TestWaferRanSinceLoad
|
||||
|
||||
If TestWaferRanSinceLoad NE True$ then
|
||||
Message = ''
|
||||
If NextEventScheduled EQ False$ or NextEventIsBlock EQ True$ then
|
||||
Message = 'No material scheduled. Test wafer required.'
|
||||
end else if NextEventHasSamePsn EQ False$ then
|
||||
Message = 'Next work order is a NEW PSN number. Test wafer required.'
|
||||
end
|
||||
|
||||
Message_Box(@Window, Message, "Test Wafer Required", MSG_BTN_OK$ + MSG_ICON_EXCLAM$)
|
||||
|
||||
TWLogResult = Dialog_Box('NDW_LOG_TEST_WAFER_USAGE', @Window, RDSNo : @VM : '' : @VM : 'REACTOR' : @VM : Reactor)
|
||||
|
||||
WoMatRecord<WO_MAT_LAST_CASSETTE_TEST_WAFER_RAN$> = TWLogResult
|
||||
|
||||
If TWLogResult NE True$ then
|
||||
ErrMsg = 'Unload blocked! You must run a test wafer before signing the unload'
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
MesageAcked = Message_Box(@Window, Message, "Test Wafer Required", MSG_BTN_OK$ + MSG_ICON_EXCLAM$)
|
||||
|
||||
WoMatRecord<WO_MAT_LAST_CASSETTE_TEST_WAFER_ACKED$> = True$
|
||||
Database_Services('WriteDataRow', 'WO_MAT', WoMatKey, WoMatRecord, True$, False$, False$)
|
||||
|
||||
ConfirmNote = 'Test wafer requirement acknowledged. [RDS:' : RDSNo : '], [WO:' : WONo : '], [Cassette:' : CassNo : ']'
|
||||
Reactor_Log_Services('AddComment', Reactor, ConfirmNote, @User4)
|
||||
end
|
||||
Database_Services('WriteDataRow', 'WO_MAT', WoMatKey, WoMatRecord, True$, False$, False$)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
QA_Services('SignUnloadStage', RDSNo, @User4)
|
||||
If ErrMsg NE '' then
|
||||
Error_Services('Add', ErrMsg)
|
||||
end
|
||||
|
||||
If Error_Services('NoError') then
|
||||
QA_Services('SignUnloadStage', RDSNo, @User4)
|
||||
end
|
||||
end
|
||||
end
|
||||
If Error_Services('HasError') then
|
||||
@ -446,3 +465,4 @@ return
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -62,24 +62,80 @@ API reactItems.HEAD
|
||||
API reactItems.GET
|
||||
|
||||
QueryFields = HTTP_Services('GetHTTPGetString')
|
||||
If Index(QueryFields, 'riType', 1) then
|
||||
RIType = HTTP_Services('GetQueryField', 'riType')
|
||||
If IndexC(QueryFields, 'includeNullRetireDt', 1) then
|
||||
IncludeNullRetireDt = HTTP_Services('GetQueryField', 'includeNullRetireDt')
|
||||
Begin Case
|
||||
Case ( (IncludeNullRetireDt EQ 1) or (IncludeNullRetireDt EQ 0) )
|
||||
Null
|
||||
Case ( (IncludeNullRetireDt _EQC 'true') or (IncludeNullRetireDt _EQC 'yes') )
|
||||
IncludeNullRetireDt = True$
|
||||
Case ( (IncludeNullRetireDt _EQC 'false') or (IncludeNullRetireDt _EQC 'no') )
|
||||
IncludeNullRetireDt = False$
|
||||
Case Otherwise$
|
||||
Error_Services('Add', 'Error in ':CurrentAPI:' API. Invalid value "':IncludeNullRetireDt:'" passed in for includeNullRetireDt.')
|
||||
End Case
|
||||
end else
|
||||
RIType = ''
|
||||
IncludeNullRetireDt = ''
|
||||
end
|
||||
|
||||
If Error_Services('NoError') then
|
||||
If IndexC(QueryFields, 'showAllDetails', 1) then
|
||||
ShowAllDetails = HTTP_Services('GetQueryField', 'showAllDetails')
|
||||
Begin Case
|
||||
Case ( (ShowAllDetails EQ 1) or (ShowAllDetails EQ 0) )
|
||||
Null
|
||||
Case ( (ShowAllDetails _EQC 'true') or (ShowAllDetails _EQC 'yes') )
|
||||
ShowAllDetails = True$
|
||||
Case ( (ShowAllDetails _EQC 'false') or (ShowAllDetails _EQC 'no') )
|
||||
ShowAllDetails = False$
|
||||
Case Otherwise$
|
||||
Error_Services('Add', 'Error in ':CurrentAPI:' API. Invalid value "':ShowAllDetails:'" passed in for showAllDetails.')
|
||||
End Case
|
||||
end else
|
||||
ShowAllDetails = False$
|
||||
end
|
||||
|
||||
If Error_Services('NoError') then
|
||||
If IndexC(QueryFields, 'currStatus', 1) then
|
||||
CurrStatus = HTTP_Services('GetQueryField', 'currStatus')
|
||||
end else
|
||||
CurrStatus = ''
|
||||
end
|
||||
If IndexC(QueryFields, 'riType', 1) then
|
||||
RIType = HTTP_Services('GetQueryField', 'riType')
|
||||
end else
|
||||
RIType = ''
|
||||
end
|
||||
If IndexC(QueryFields, 'entryDtStart', 1) then
|
||||
EntryDtStart = HTTP_Services('GetQueryField', 'entryDtStart')
|
||||
end else
|
||||
EntryDtStart = ''
|
||||
end
|
||||
If IndexC(QueryFields, 'entryDtEnd', 1) then
|
||||
EntryDtEnd = HTTP_Services('GetQueryField', 'entryDtEnd')
|
||||
end else
|
||||
EntryDtEnd = ''
|
||||
end
|
||||
If IndexC(QueryFields, 'retireDtStart', 1) then
|
||||
RetireDtStart = HTTP_Services('GetQueryField', 'retireDtStart')
|
||||
end else
|
||||
RetireDtStart = ''
|
||||
end
|
||||
If IndexC(QueryFields, 'retireDtEnd', 1) then
|
||||
RetireDtEnd = HTTP_Services('GetQueryField', 'retireDtEnd')
|
||||
end else
|
||||
RetireDtEnd = ''
|
||||
end
|
||||
|
||||
StatusCode = 200
|
||||
GoSub CreateHALCollection
|
||||
end else
|
||||
HTTP_Services('SetResponseStatus', 400, Error_Services("GetMessage"))
|
||||
end
|
||||
end else
|
||||
HTTP_Services('SetResponseStatus', 400, Error_Services("GetMessage"))
|
||||
end
|
||||
If Index(QueryFields, 'currStatus', 1 ) then
|
||||
CurrStatus = Http_Services('GetQueryField', 'currStatus')
|
||||
end else
|
||||
CurrStatus = ''
|
||||
end
|
||||
If Index(QueryFields, 'showAllDetails', 1 ) then
|
||||
ShowAllDetails = Http_Services('GetQueryField', 'showAllDetails')
|
||||
end else
|
||||
ShowAllDetails = False$
|
||||
end
|
||||
StatusCode = 200
|
||||
|
||||
GoSub CreateHALCollection
|
||||
end api
|
||||
|
||||
|
||||
@ -254,11 +310,7 @@ CreateHALCollection:
|
||||
|
||||
JSONCollection = ''
|
||||
Abort = False$
|
||||
If RIType NE '' OR CurrStatus NE '' then
|
||||
ReactItems = React_Item_Services('GetReactItems', RIType, CurrStatus)
|
||||
end else
|
||||
ReactItems = React_Item_Services('GetAllReactItemKeys')
|
||||
end
|
||||
ReactItems = React_Item_Services('GetReactItems', RIType, CurrStatus, EntryDtStart, EntryDtEnd, RetireDtStart, RetireDtEnd, IncludeNullRetireDt)
|
||||
|
||||
If ReactItems NE '' then
|
||||
If SRP_JSON(hJSONCollection, 'New', 'Object') then
|
||||
@ -304,3 +356,4 @@ CreateHALCollection:
|
||||
end
|
||||
|
||||
return
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -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 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 Nica_Orders_Services, Max, RTI_CreateGUID
|
||||
Declare function Nica_Orders_Services, Max, RTI_CreateGUID, GetTickCount
|
||||
|
||||
// Report paths for various performance report services.
|
||||
TemplatesFolder = Environment_Services('GetApplicationRootPath') : '\Reports\Scheduler\Templates\'
|
||||
@ -91,6 +91,13 @@ LogDate = Oconv(Date(), 'D4/')
|
||||
LogTime = Oconv(Time(), 'MTS')
|
||||
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
|
||||
|
||||
end
|
||||
@ -101,7 +108,7 @@ Return Response else ''
|
||||
// Service Parameter Options
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
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'
|
||||
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'
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Services
|
||||
@ -116,6 +123,8 @@ Options REACTORMETRIC = 'TUBE_BELL_JAR_THK', 'TUBE_BELL_JAR_WFR_CNT', 'SUSC_THK'
|
||||
//
|
||||
//----------------------------------------------------------------------------------------------------------------------
|
||||
Service IncrementWfrMetrics(RDSNo)
|
||||
StartTick = GetTickCount()
|
||||
MetricName = 'IncrementWfrMetrics'
|
||||
|
||||
// Get Reactor and run count details
|
||||
RDSRec = Xlate('RDS', RDSNo, '', 'X', '')
|
||||
@ -136,6 +145,7 @@ Service IncrementWfrMetrics(RDSNo)
|
||||
CurrSuscWfrCnt = OldReactorRec<REACTOR_SUSC_WFR_CNT$>
|
||||
CurrLowerQuartzThk = OldReactorRec<REACTOR_LOWER_QUARTZ_THK$>
|
||||
CurrLowerQuartzWfr = OldReactorRec<REACTOR_LOWER_QUARTZ_WFR$>
|
||||
CurrExhaustThk = OldReactorRec<REACTOR_EXHAUST_CHAMBER_THK$>
|
||||
|
||||
// Arms are not used for EPP
|
||||
If ReactorType NE 'EPP' then
|
||||
@ -150,6 +160,7 @@ Service IncrementWfrMetrics(RDSNo)
|
||||
If CurrSuscWfrCnt = '' then CurrSuscWfrCnt = 0
|
||||
If CurrLowerQuartzThk = '' then CurrLowerQuartzThk = 0
|
||||
If CurrLowerQuartzWfr = '' then CurrLowerQuartzWfr = 0
|
||||
If CurrExhaustThk = '' then CurrExhaustThk = 0
|
||||
|
||||
Begin Case
|
||||
|
||||
@ -161,6 +172,7 @@ Service IncrementWfrMetrics(RDSNo)
|
||||
NewReactorRec<REACTOR_SUSC_WFR_CNT$> = CurrSuscWfrCnt + 1
|
||||
NewReactorRec<REACTOR_LOWER_QUARTZ_THK$> = CurrLowerQuartzThk + TargetThickness
|
||||
NewReactorRec<REACTOR_LOWER_QUARTZ_WFR$> = CurrLowerQuartzWfr + 1
|
||||
NewReactorRec<REACTOR_EXHAUST_CHAMBER_THK$> = CurrExhaustThk + TargetThickness
|
||||
|
||||
Case ReactorType = 'HTR'
|
||||
|
||||
@ -176,6 +188,7 @@ Service IncrementWfrMetrics(RDSNo)
|
||||
NewReactorRec<REACTOR_LOWER_QUARTZ_THK$> = CurrLowerQuartzThk + ThkAddition
|
||||
NewReactorRec<REACTOR_LOWER_QUARTZ_WFR$> = CurrLowerQuartzWfr + CntAddition
|
||||
NewReactorRec<REACTOR_ARMS_WFR_CNT$> = CurrArmsWfrCnt + WaferCount
|
||||
NewReactorRec<REACTOR_EXHAUST_CHAMBER_THK$> = CurrExhaustThk + ThkAddition
|
||||
|
||||
Case SusceptorSize = 8
|
||||
// Round up
|
||||
@ -192,6 +205,7 @@ Service IncrementWfrMetrics(RDSNo)
|
||||
NewReactorRec<REACTOR_LOWER_QUARTZ_THK$> = CurrLowerQuartzThk + ThkAddition
|
||||
NewReactorRec<REACTOR_LOWER_QUARTZ_WFR$> = CurrLowerQuartzWfr + CntAddition
|
||||
NewReactorRec<REACTOR_ARMS_WFR_CNT$> = CurrArmsWfrCnt + WaferCount
|
||||
NewReactorRec<REACTOR_EXHAUST_CHAMBER_THK$> = CurrExhaustThk + ThkAddition
|
||||
|
||||
End Case
|
||||
|
||||
@ -206,11 +220,14 @@ Service IncrementWfrMetrics(RDSNo)
|
||||
NewReactorRec<REACTOR_LOWER_QUARTZ_THK$> = CurrLowerQuartzThk + ThkAddition
|
||||
NewReactorRec<REACTOR_LOWER_QUARTZ_WFR$> = CurrLowerQuartzWfr + WaferCount
|
||||
NewReactorRec<REACTOR_ARMS_WFR_CNT$> = CurrArmsWfrCnt + WaferCount
|
||||
NewReactorRec<REACTOR_EXHAUST_CHAMBER_THK$> = CurrExhaustThk + ThkAddition
|
||||
|
||||
End Case
|
||||
|
||||
Database_Services('WriteDataRow', 'REACTOR', ReactorNo, NewReactorRec, 1, 0, 0)
|
||||
|
||||
EndTick = GetTickCount()
|
||||
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
|
||||
end service
|
||||
|
||||
|
||||
@ -229,6 +246,7 @@ Service GetWaferCntMetricsByReactorID(ReactorID)
|
||||
ResponseData<1, 4> = ReactorRec<REACTOR_TUBE_BELL_JAR_WFR_CNT$>
|
||||
ResponseData<1, 5> = ReactorRec<REACTOR_TUBE_BELL_JAR_THK$>
|
||||
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
|
||||
ResponseData<2, 1> = 'ReactorID'
|
||||
ResponseData<2, 2> = 'SusceptorWaferCount'
|
||||
@ -236,6 +254,7 @@ Service GetWaferCntMetricsByReactorID(ReactorID)
|
||||
ResponseData<2, 4> = 'TubeWaferCount'
|
||||
ResponseData<2, 5> = 'TubeThickness'
|
||||
ResponseData<2, 6> = 'ArmsWaferCount'
|
||||
ResponseData<2, 7> = 'ExhuastChamberThickness'
|
||||
Case ReactorType EQ 'HTR'
|
||||
ResponseData<1, 1> = ReactorID
|
||||
ResponseData<1, 2> = ReactorRec<REACTOR_SUSC_WFR_CNT$>
|
||||
@ -243,6 +262,7 @@ Service GetWaferCntMetricsByReactorID(ReactorID)
|
||||
ResponseData<1, 4> = ReactorRec<REACTOR_TUBE_BELL_JAR_WFR_CNT$>
|
||||
ResponseData<1, 5> = ReactorRec<REACTOR_TUBE_BELL_JAR_THK$>
|
||||
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
|
||||
ResponseData<2, 1> = 'ReactorID'
|
||||
ResponseData<2, 2> = 'SusceptorWaferCount'
|
||||
@ -250,6 +270,7 @@ Service GetWaferCntMetricsByReactorID(ReactorID)
|
||||
ResponseData<2, 4> = 'TubeWaferCount'
|
||||
ResponseData<2, 5> = 'TubeThickness'
|
||||
ResponseData<2, 6> = 'ArmsWaferCount'
|
||||
ResponseData<2, 7> = 'ExhuastChamberThickness'
|
||||
Case ReactorType EQ 'EPP'
|
||||
ResponseData<1, 1> = ReactorID
|
||||
ResponseData<1, 2> = ReactorRec<REACTOR_SUSC_WFR_CNT$>
|
||||
@ -258,6 +279,7 @@ Service GetWaferCntMetricsByReactorID(ReactorID)
|
||||
ResponseData<1, 5> = ReactorRec<REACTOR_TUBE_BELL_JAR_THK$>
|
||||
ResponseData<1, 6> = ReactorRec<REACTOR_LOWER_QUARTZ_WFR$>
|
||||
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
|
||||
ResponseData<2, 1> = 'ReactorID'
|
||||
ResponseData<2, 2> = 'SusceptorWaferCount'
|
||||
@ -266,6 +288,7 @@ Service GetWaferCntMetricsByReactorID(ReactorID)
|
||||
ResponseData<2, 5> = 'BellJarThickness'
|
||||
ResponseData<2, 6> = 'LowerQuartzWaferCount'
|
||||
ResponseData<2, 7> = 'LowerQuartzThickness'
|
||||
ResponseData<2, 8> = 'ExhuastChamberThickness'
|
||||
End Case
|
||||
Response = ResponseData
|
||||
end else
|
||||
@ -307,6 +330,7 @@ Service DecrementWfrMetrics(RDSNo)
|
||||
CurrSuscWfrCnt = OldReactorRec<REACTOR_SUSC_WFR_CNT$>
|
||||
CurrLowerQuartzThk = OldReactorRec<REACTOR_LOWER_QUARTZ_THK$>
|
||||
CurrLowerQuartzWfr = OldReactorRec<REACTOR_LOWER_QUARTZ_WFR$>
|
||||
CurrExhaustThk = OldReactorRec<REACTOR_EXHAUST_CHAMBER_THK$>
|
||||
|
||||
// Arms are not used for EPP
|
||||
If ReactorType NE 'EPP' then
|
||||
@ -321,6 +345,7 @@ Service DecrementWfrMetrics(RDSNo)
|
||||
If CurrSuscWfrCnt = '' then CurrSuscWfrCnt = 0
|
||||
If CurrLowerQuartzThk = '' then CurrLowerQuartzThk = 0
|
||||
If CurrLowerQuartzWfr = '' then CurrLowerQuartzWfr = 0
|
||||
If CurrExhaustThk = '' then CurrExhaustThk = 0
|
||||
|
||||
Begin Case
|
||||
|
||||
@ -332,6 +357,7 @@ Service DecrementWfrMetrics(RDSNo)
|
||||
NewReactorRec<REACTOR_SUSC_WFR_CNT$> = CurrSuscWfrCnt - 1
|
||||
NewReactorRec<REACTOR_LOWER_QUARTZ_THK$> = CurrLowerQuartzThk - TargetThickness
|
||||
NewReactorRec<REACTOR_LOWER_QUARTZ_WFR$> = CurrLowerQuartzWfr - 1
|
||||
NewReactorRec<REACTOR_EXHAUST_CHAMBER_THK$> = CurrExhaustThk - TargetThickness
|
||||
|
||||
Case ReactorType = 'HTR'
|
||||
|
||||
@ -342,11 +368,12 @@ Service DecrementWfrMetrics(RDSNo)
|
||||
ThkAddition = (WaferCount / 5) * TargetThickness
|
||||
NewReactorRec<REACTOR_TUBE_BELL_JAR_THK$> = CurrTubeBellJarThk - ThkAddition
|
||||
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_LOWER_QUARTZ_THK$> = CurrLowerQuartzThk - ThkAddition
|
||||
NewReactorRec<REACTOR_LOWER_QUARTZ_WFR$> = CurrLowerQuartzWfr - CntAddition
|
||||
NewReactorRec<REACTOR_ARMS_WFR_CNT$> = CurrArmsWfrCnt - WaferCount
|
||||
NewReactorRec<REACTOR_EXHAUST_CHAMBER_THK$> = CurrExhaustThk - ThkAddition
|
||||
|
||||
Case SusceptorSize = 8
|
||||
// Round up
|
||||
@ -363,6 +390,7 @@ Service DecrementWfrMetrics(RDSNo)
|
||||
NewReactorRec<REACTOR_LOWER_QUARTZ_THK$> = CurrLowerQuartzThk - ThkAddition
|
||||
NewReactorRec<REACTOR_LOWER_QUARTZ_WFR$> = CurrLowerQuartzWfr - CntAddition
|
||||
NewReactorRec<REACTOR_ARMS_WFR_CNT$> = CurrArmsWfrCnt - WaferCount
|
||||
NewReactorRec<REACTOR_EXHAUST_CHAMBER_THK$> = CurrExhaustThk - ThkAddition
|
||||
|
||||
End Case
|
||||
|
||||
@ -377,6 +405,7 @@ Service DecrementWfrMetrics(RDSNo)
|
||||
NewReactorRec<REACTOR_LOWER_QUARTZ_THK$> = CurrLowerQuartzThk - ThkAddition
|
||||
NewReactorRec<REACTOR_LOWER_QUARTZ_WFR$> = CurrLowerQuartzWfr - WaferCount
|
||||
NewReactorRec<REACTOR_ARMS_WFR_CNT$> = CurrArmsWfrCnt - WaferCount
|
||||
NewReactorRec<REACTOR_EXHAUST_CHAMBER_THK$> = CurrExhaustThk - ThkAddition
|
||||
|
||||
End Case
|
||||
|
||||
@ -410,6 +439,7 @@ Service IncrementTestWfrMetrics(TargetThickness, WaferCount, ReactorNo)
|
||||
CurrSuscWfrCnt = OldReactorRec<REACTOR_SUSC_WFR_CNT$>
|
||||
CurrLowerQuartzThk = OldReactorRec<REACTOR_LOWER_QUARTZ_THK$>
|
||||
CurrLowerQuartzWfr = OldReactorRec<REACTOR_LOWER_QUARTZ_WFR$>
|
||||
CurrExhaustThk = OldReactorRec<REACTOR_EXHAUST_CHAMBER_THK$>
|
||||
|
||||
// Arms are not used for EPP
|
||||
If ReactorType NE 'EPP' then
|
||||
@ -435,6 +465,7 @@ Service IncrementTestWfrMetrics(TargetThickness, WaferCount, ReactorNo)
|
||||
NewReactorRec<REACTOR_SUSC_WFR_CNT$> = CurrSuscWfrCnt + 1
|
||||
NewReactorRec<REACTOR_LOWER_QUARTZ_THK$> = CurrLowerQuartzThk + TargetThickness
|
||||
NewReactorRec<REACTOR_LOWER_QUARTZ_WFR$> = CurrLowerQuartzWfr + 1
|
||||
NewReactorRec<REACTOR_EXHAUST_CHAMBER_THK$> = CurrExhaustThk + TargetThickness
|
||||
|
||||
Case ReactorType = 'HTR'
|
||||
|
||||
@ -450,6 +481,7 @@ Service IncrementTestWfrMetrics(TargetThickness, WaferCount, ReactorNo)
|
||||
NewReactorRec<REACTOR_LOWER_QUARTZ_THK$> = CurrLowerQuartzThk + ThkAddition
|
||||
NewReactorRec<REACTOR_LOWER_QUARTZ_WFR$> = CurrLowerQuartzWfr + CntAddition
|
||||
NewReactorRec<REACTOR_ARMS_WFR_CNT$> = CurrArmsWfrCnt + WaferCount
|
||||
NewReactorRec<REACTOR_EXHAUST_CHAMBER_THK$> = CurrExhaustThk + ThkAddition
|
||||
|
||||
Case SusceptorSize = 8
|
||||
// Round up
|
||||
@ -466,6 +498,7 @@ Service IncrementTestWfrMetrics(TargetThickness, WaferCount, ReactorNo)
|
||||
NewReactorRec<REACTOR_LOWER_QUARTZ_THK$> = CurrLowerQuartzThk + ThkAddition
|
||||
NewReactorRec<REACTOR_LOWER_QUARTZ_WFR$> = CurrLowerQuartzWfr + CntAddition
|
||||
NewReactorRec<REACTOR_ARMS_WFR_CNT$> = CurrArmsWfrCnt + WaferCount
|
||||
NewReactorRec<REACTOR_EXHAUST_CHAMBER_THK$> = CurrExhaustThk + ThkAddition
|
||||
|
||||
End Case
|
||||
|
||||
@ -480,6 +513,7 @@ Service IncrementTestWfrMetrics(TargetThickness, WaferCount, ReactorNo)
|
||||
NewReactorRec<REACTOR_LOWER_QUARTZ_THK$> = CurrLowerQuartzThk + ThkAddition
|
||||
NewReactorRec<REACTOR_LOWER_QUARTZ_WFR$> = CurrLowerQuartzWfr + WaferCount
|
||||
NewReactorRec<REACTOR_ARMS_WFR_CNT$> = CurrArmsWfrCnt + WaferCount
|
||||
NewReactorRec<REACTOR_EXHAUST_CHAMBER_THK$> = CurrExhaustThk + ThkAddition
|
||||
|
||||
End Case
|
||||
|
||||
@ -513,6 +547,7 @@ Service DecrementTestWfrMetrics(TargetThickness, WaferCount, ReactorNo)
|
||||
CurrSuscWfrCnt = OldReactorRec<REACTOR_SUSC_WFR_CNT$>
|
||||
CurrLowerQuartzThk = OldReactorRec<REACTOR_LOWER_QUARTZ_THK$>
|
||||
CurrLowerQuartzWfr = OldReactorRec<REACTOR_LOWER_QUARTZ_WFR$>
|
||||
CurrExhaustThk = OldReactorRec<REACTOR_EXHAUST_CHAMBER_THK$>
|
||||
|
||||
// Arms are not used for EPP
|
||||
If ReactorType NE 'EPP' then
|
||||
@ -527,6 +562,7 @@ Service DecrementTestWfrMetrics(TargetThickness, WaferCount, ReactorNo)
|
||||
If CurrSuscWfrCnt = '' then CurrSuscWfrCnt = 0
|
||||
If CurrLowerQuartzThk = '' then CurrLowerQuartzThk = 0
|
||||
If CurrLowerQuartzWfr = '' then CurrLowerQuartzWfr = 0
|
||||
If CurrExhaustThk = '' then CurrExhaustThk = 0
|
||||
|
||||
Begin Case
|
||||
|
||||
@ -538,6 +574,7 @@ Service DecrementTestWfrMetrics(TargetThickness, WaferCount, ReactorNo)
|
||||
NewReactorRec<REACTOR_SUSC_WFR_CNT$> = CurrSuscWfrCnt - 1
|
||||
NewReactorRec<REACTOR_LOWER_QUARTZ_THK$> = CurrLowerQuartzThk - TargetThickness
|
||||
NewReactorRec<REACTOR_LOWER_QUARTZ_WFR$> = CurrLowerQuartzWfr - 1
|
||||
NewReactorRec<REACTOR_EXHAUST_CHAMBER_THK$> = CurrExhaustThk - TargetThickness
|
||||
|
||||
Case ReactorType = 'HTR'
|
||||
|
||||
@ -548,11 +585,12 @@ Service DecrementTestWfrMetrics(TargetThickness, WaferCount, ReactorNo)
|
||||
ThkAddition = (WaferCount / 5) * TargetThickness
|
||||
NewReactorRec<REACTOR_TUBE_BELL_JAR_THK$> = CurrTubeBellJarThk - ThkAddition
|
||||
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_LOWER_QUARTZ_THK$> = CurrLowerQuartzThk - ThkAddition
|
||||
NewReactorRec<REACTOR_LOWER_QUARTZ_WFR$> = CurrLowerQuartzWfr - CntAddition
|
||||
NewReactorRec<REACTOR_ARMS_WFR_CNT$> = CurrArmsWfrCnt - WaferCount
|
||||
NewReactorRec<REACTOR_EXHAUST_CHAMBER_THK$> = CurrExhaustThk - ThkAddition
|
||||
|
||||
Case SusceptorSize = 8
|
||||
// Round up
|
||||
@ -569,6 +607,7 @@ Service DecrementTestWfrMetrics(TargetThickness, WaferCount, ReactorNo)
|
||||
NewReactorRec<REACTOR_LOWER_QUARTZ_THK$> = CurrLowerQuartzThk - ThkAddition
|
||||
NewReactorRec<REACTOR_LOWER_QUARTZ_WFR$> = CurrLowerQuartzWfr - CntAddition
|
||||
NewReactorRec<REACTOR_ARMS_WFR_CNT$> = CurrArmsWfrCnt - WaferCount
|
||||
NewReactorRec<REACTOR_EXHAUST_CHAMBER_THK$> = CurrExhaustThk - ThkAddition
|
||||
|
||||
End Case
|
||||
|
||||
@ -583,6 +622,7 @@ Service DecrementTestWfrMetrics(TargetThickness, WaferCount, ReactorNo)
|
||||
NewReactorRec<REACTOR_LOWER_QUARTZ_THK$> = CurrLowerQuartzThk - ThkAddition
|
||||
NewReactorRec<REACTOR_LOWER_QUARTZ_WFR$> = CurrLowerQuartzWfr - WaferCount
|
||||
NewReactorRec<REACTOR_ARMS_WFR_CNT$> = CurrArmsWfrCnt - WaferCount
|
||||
NewReactorRec<REACTOR_EXHAUST_CHAMBER_THK$> = CurrExhaustThk - ThkAddition
|
||||
|
||||
End Case
|
||||
|
||||
@ -596,7 +636,7 @@ end service
|
||||
// ResetWfrMetric
|
||||
//
|
||||
// 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')
|
||||
// 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)
|
||||
//
|
||||
// Reset a specified REACTOR metric to 0.
|
||||
//
|
||||
@ -628,6 +668,9 @@ Service ResetWfrMetric(ReactorNo, MetricType = REACTORMETRIC)
|
||||
Case MetricType = 'ARMS_WFR_CNT'
|
||||
ReactorRec<REACTOR_ARMS_WFR_CNT$> = 0
|
||||
|
||||
Case MetricType = 'EXHAUST_CHAMBER_THK'
|
||||
ReactorRec<REACTOR_EXHAUST_CHAMBER_THK$> = 0
|
||||
|
||||
End Case
|
||||
|
||||
Database_Services('WriteDataRow', 'REACTOR', ReactorNo, ReactorRec, 1, 0, 0)
|
||||
@ -1999,16 +2042,35 @@ Service CreateReactModeChange(UserID, ReactNo, Mode, ModeSubCat, ModeText, Force
|
||||
If ErrorMsg EQ '' then
|
||||
AbortAlarmFeatureFlag = Xlate('FEATURE_FLAGS', 'NICA_ABORT_ALARM', FEATURE_FLAGS.ENABLED$, 'X')
|
||||
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')
|
||||
ModeSubCatRespLvl = Xlate('REACT_PROB_CAT', ModeSubCatId, REACT_PROB_CAT_ABORT_ALARM_RESPONSE_LEVEL$, 'X')
|
||||
AbortAlarmComp = Xlate('REACTOR', ReactNo, REACTOR_ABORT_ALARM_COMPLETE$, 'X')
|
||||
ActiveAbortAlarmOrders = Nica_Orders_Services('GetActiveOrders', 'REACTOR', ReactNo, 'ABORT_ALARM')
|
||||
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
|
||||
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."
|
||||
|
||||
Case ( AbortAlarmOrderActive and IndexC(ModeSubCat, 'ABORT/ALARM', 1) and (ModeSubCatFlowId NE '') )
|
||||
Case ( AbortAlarmFromIntrusiveMaintRequired and IndexC(ModeSubCat, 'ABORT/ALARM', 1) and (ModeSubCatFlowId NE '') and (ChecklistIds 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
|
||||
// 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.
|
||||
@ -2020,26 +2082,26 @@ Service CreateReactModeChange(UserID, ReactNo, Mode, ModeSubCat, ModeText, Force
|
||||
Next ActiveAbortAlarmRespLvl
|
||||
If ( (Mode _EQC 'WAITING_FOR_OPERATOR') and (ModeSubCatFlowId NE ActiveAbortAlarmFlowIds) ) |
|
||||
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
|
||||
Nica_Orders_Services('CreateNewOrder', 'REACTOR', ReactNo, 'ABORT_ALARM', ModeSubCatFlowId, ModeSubCatRespLvl, ChecklistIds)
|
||||
RlComment = 'ABORT/ALARM initiated for flow ':ModeSubCatFlowId:'.'
|
||||
CreateAbortAlarmOrder = True$
|
||||
end
|
||||
end
|
||||
|
||||
Case ( Not(AbortAlarmComp) and Not(AbortAlarmOrderActive) and IndexC(ModeSubCat, 'ABORT/ALARM', 1) and (ModeSubCatFlowId NE '') )
|
||||
ReactorType = Xlate('REACTOR', ReactNo, REACTOR_REACT_TYPE$, 'X')
|
||||
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 ( Not(IntrusiveMaintChecklistActive) and Not(AbortAlarmComp) and Not(AbortAlarmOrderActive) and IndexC(ModeSubCat, 'ABORT/ALARM', 1) and (ModeSubCatFlowId NE '') and (ChecklistIds NE '') )
|
||||
// Typical ABORT/ALARM case
|
||||
CreateAbortAlarmOrder = True$
|
||||
|
||||
Case Otherwise$
|
||||
// Don't create an ABORT/ALARM NICA order
|
||||
Null
|
||||
|
||||
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
|
||||
|
||||
@ -3552,6 +3614,8 @@ end service
|
||||
|
||||
|
||||
Service GetReactorAvailChamberCount(ReactNo)
|
||||
StartTick = GetTickCount()
|
||||
MetricName = 'GetReactorAvailChamberCount'
|
||||
|
||||
ErrMsg = 'Error in ReactorServices -> GetReactorAvailChamberCount: '
|
||||
AvailableChamberCount = 0
|
||||
@ -3571,6 +3635,8 @@ Service GetReactorAvailChamberCount(ReactNo)
|
||||
end
|
||||
Response = AvailableChamberCount
|
||||
|
||||
EndTick = GetTickCount()
|
||||
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
|
||||
end service
|
||||
|
||||
|
||||
@ -4289,3 +4355,4 @@ ClearCursors:
|
||||
|
||||
return
|
||||
|
||||
|
||||
|
@ -1,10 +1,10 @@
|
||||
Function REACT_ITEM_Actions(Action, CalcColName, FSList, Handle, Name, FMC, Record, Status, OrigRecord, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10)
|
||||
Function REACT_ITEM_ACTIONS(Action, CalcColName, FSList, Handle, Name, FMC, Record, Status, OrigRecord, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10)
|
||||
/***********************************************************************************************************************
|
||||
|
||||
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 Infineon.
|
||||
|
||||
Name : RDS_Actions
|
||||
Name : React_Item_Actions
|
||||
|
||||
Description : Handles calculated columns and MFS calls for the current table.
|
||||
|
||||
@ -36,39 +36,19 @@ Function REACT_ITEM_Actions(Action, CalcColName, FSList, Handle, Name, FMC, Reco
|
||||
method.
|
||||
|
||||
History : (Date, Initials, Notes)
|
||||
04/10/18 dmb Original programmer.
|
||||
10/04/18 djs Added a trigger within the WRITE_RECORD event, which fires when the reactor number has
|
||||
changed. When this occurs the related RDS_LAYER records for this RDS record are populated
|
||||
with the most recent associated TOOL_PARMS record. (related by PSN and Reactor)
|
||||
05/12/25 djs Updated WRITE_PRE action to update the CURR_STATUS_STATIC field if the retire date changes.
|
||||
|
||||
***********************************************************************************************************************/
|
||||
|
||||
#pragma precomp SRP_PreCompiler
|
||||
|
||||
$Insert FILE.SYSTEM.EQUATES
|
||||
$Insert ACTION_SETUP
|
||||
$Insert RDS_EQUATES
|
||||
$Insert CLEAN_INSP_EQUATES
|
||||
$Insert COMPANY_EQUATES
|
||||
$Insert RDS_LAYER_EQUATES
|
||||
$Insert TOOL_PARMS_EQUATES
|
||||
$Insert RLIST_EQUATES
|
||||
$Insert APP_INSERTS
|
||||
$Insert QA_MET_EQUATES
|
||||
$Insert PRS_STAGE_EQUATES
|
||||
$Insert WO_MAT_EQUATES
|
||||
$Insert WO_MAT_QA_EQUATES
|
||||
|
||||
Equ COMMA$ to ','
|
||||
|
||||
Declare function Error_Services, Database_Services, obj_RDS_Test, Logging_Services, Environment_Services, SRP_Math
|
||||
Declare function Tool_Parms_Services, Signature_Services, obj_WO_Mat_QA, Datetime, Override_Services, obj_WO_Mat
|
||||
Declare subroutine Error_Services, Database_Services, Logging_Services, Set_Status, Schedule_Services_Dev
|
||||
Declare subroutine Work_Order_Services, Material_Services, Set_FSError
|
||||
|
||||
|
||||
|
||||
$Insert FILE.SYSTEM.EQUATES
|
||||
$Insert REACT_ITEM_EQUATES
|
||||
|
||||
Declare function obj_React_Item
|
||||
Declare subroutine Error_Services
|
||||
|
||||
If KeyID then GoSub Initialize_System_Variables
|
||||
|
||||
@ -109,12 +89,8 @@ CalculateColumn:
|
||||
// Make sure the ActionFlow return variable is cleared in case nothing is calculated.
|
||||
ActionFlow = ''
|
||||
|
||||
|
||||
|
||||
return
|
||||
|
||||
|
||||
|
||||
// ----- MFS calls -----------------------------------------------------------------------------------------------------
|
||||
|
||||
READ_RECORD_PRE:
|
||||
@ -124,10 +100,9 @@ READ_RECORD_PRE:
|
||||
// Status = 0
|
||||
// Record = ''
|
||||
// ActionFlow = ACTION_STOP$
|
||||
|
||||
|
||||
return
|
||||
|
||||
|
||||
READ_RECORD:
|
||||
|
||||
// In order to stop a record from being read in this action these lines of code must be used:
|
||||
@ -138,6 +113,7 @@ READ_RECORD:
|
||||
|
||||
return
|
||||
|
||||
|
||||
READONLY_RECORD_PRE:
|
||||
// In order to stop a record from being read in this action these lines of code must be used:
|
||||
//
|
||||
@ -147,6 +123,7 @@ READONLY_RECORD_PRE:
|
||||
// ActionFlow = ACTION_STOP$
|
||||
return
|
||||
|
||||
|
||||
READONLY_RECORD:
|
||||
// In order to stop a record from being read in this action these lines of code must be used:
|
||||
//
|
||||
@ -155,51 +132,56 @@ READONLY_RECORD:
|
||||
// Record = ''
|
||||
return
|
||||
|
||||
|
||||
WRITE_RECORD_PRE:
|
||||
|
||||
ErrMsg = ''
|
||||
ErrMsg = ''
|
||||
|
||||
//Req'd parameter checks
|
||||
ItemType = {RI_TYPE}
|
||||
// Req'd parameter checks
|
||||
ItemType = {RI_TYPE}
|
||||
|
||||
If ItemType EQ '' then
|
||||
ErrMsg := 'Item Type was not specified. '
|
||||
end
|
||||
If ItemType EQ '' then ErrMsg := 'Item Type was not specified. '
|
||||
|
||||
If ErrMsg NE '' then
|
||||
Error_Services('Add', 'Error Saving Reactor Item: ' : ErrMsg)
|
||||
OrigFileError = 104:': Error Saving Reactor Item: ' : ErrMsg
|
||||
Status = 0
|
||||
Record = ''
|
||||
ActionFlow = ACTION_STOP$
|
||||
end
|
||||
If ErrMsg NE '' then
|
||||
Error_Services('Add', 'Error Saving Reactor Item: ' : ErrMsg)
|
||||
OrigFileError = 104:': Error Saving Reactor Item: ' : ErrMsg
|
||||
Status = 0
|
||||
Record = ''
|
||||
ActionFlow = ACTION_STOP$
|
||||
end else
|
||||
OrigRetireDt = OrigRecord<REACT_ITEM_RETIRE_DT$>
|
||||
NewRetireDt = Record<REACT_ITEM_RETIRE_DT$>
|
||||
OrigNotes = OrigRecord<REACT_ITEM_NOTES$>
|
||||
NewNotes = Record<REACT_ITEM_NOTES$>
|
||||
If ( (OrigRetireDt NE NewRetireDt) or (OrigNotes NE NewNotes) ) then
|
||||
CurrStatus = obj_React_Item('CurrStatus', Name:@RM:Record)
|
||||
Record<REACT_ITEM_CURR_STATUS_STATIC$> = CurrStatus
|
||||
SaveRecord = Record
|
||||
end
|
||||
end
|
||||
|
||||
return
|
||||
|
||||
WRITE_RECORD:
|
||||
|
||||
|
||||
|
||||
return
|
||||
|
||||
DELETE_RECORD_PRE:
|
||||
|
||||
|
||||
return
|
||||
|
||||
DELETE_RECORD:
|
||||
return
|
||||
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Internal GoSubs
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
ClearCursors:
|
||||
|
||||
For counter = 0 to 8
|
||||
ClearSelect counter
|
||||
Next counter
|
||||
|
||||
return
|
||||
|
||||
|
||||
@ -251,4 +233,3 @@ Restore_System_Variables:
|
||||
|
||||
return
|
||||
|
||||
|
||||
|
@ -20,62 +20,110 @@ Compile function React_Item_Services(@Service, @Params)
|
||||
08/02/22 djs Original programmer.
|
||||
|
||||
***********************************************************************************************************************/
|
||||
|
||||
#pragma precomp SRP_PreCompiler
|
||||
|
||||
$Insert LOGICAL
|
||||
$Insert APP_INSERTS
|
||||
$Insert SERVICE_SETUP
|
||||
$Insert RLIST_EQUATES
|
||||
$Insert REACT_ITEM_EQUATES
|
||||
|
||||
Declare function Database_Services, Error_Services, SRP_JSON, NextKey
|
||||
Declare subroutine SRP_JSON, Error_Services, Btree.Extract, Database_Services
|
||||
GoToService
|
||||
Declare function Database_Services, Error_Services, SRP_JSON, NextKey, SRP_Date, obj_React_Item, SRP_Array
|
||||
Declare subroutine SRP_JSON, Error_Services, Btree.Extract, Database_Services, Update_Index
|
||||
|
||||
Return Response or ""
|
||||
GoToService else
|
||||
Error_Services('Set', Service : ' is not a valid service request within the ' : ServiceModule : ' services module.')
|
||||
end
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// SERVICES
|
||||
//-----------------------------------------------------------------------------
|
||||
Return Response else ''
|
||||
|
||||
Service GetAllReactItemKeys()
|
||||
AllKeys = ''
|
||||
RList('SELECT REACT_ITEM', TARGET_ACTIVELIST$, '', '', '')
|
||||
Done = False$
|
||||
Reactors = ''
|
||||
Loop
|
||||
Readnext keyId else Done = True$
|
||||
Until Done
|
||||
AllKeys<1,-1> = keyId
|
||||
Repeat
|
||||
Response = AllKeys
|
||||
end service
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Service Parameter Options
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
Options BOOLEAN = True$, False$
|
||||
|
||||
Service GetReactItems(RIType, CurrStatus)
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Services
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
Service GetReactItems(RIType, CurrStatus, EntryDtStart, EntryDtEnd, RetireDtStart, RetireDtEnd, IncludeNullRetireDt=BOOLEAN)
|
||||
|
||||
ErrorMsg = ''
|
||||
Response = ''
|
||||
Swap ',' with @VM in RIType
|
||||
Swap ',' with @VM in CurrStatus
|
||||
|
||||
Open 'DICT.REACT_ITEM' to DictReactItem then
|
||||
|
||||
SearchString = ''
|
||||
If RIType NE '' then SearchString := 'RI_TYPE':@VM:RIType:@FM
|
||||
If CurrStatus NE '' then SearchString := 'CURR_STATUS':@VM:CurrStatus:@FM
|
||||
RIKeys = ''
|
||||
Btree.Extract(SearchString, 'REACT_ITEM', DictReactItem, RIKeys, '', '')
|
||||
ErrCode = ''
|
||||
IF Get_Status(ErrCode) then
|
||||
ErrorMsg = 'Error in ':Service:' service. Error calling Btree.Extract. Error code ':ErrCode:'.'
|
||||
If ( (RIType NE '') or (CurrStatus NE '') or (EntryDtStart NE '') or (EntryDtEnd NE '') or (RetireDtStart NE '') or (RetireDtEnd NE '') or (IncludeNullRetireDt NE '') ) then
|
||||
If EntryDtStart NE '' and Not(Num(EntryDtStart)) then EntryDtStart = IConv(EntryDtStart, 'D')
|
||||
If EntryDtEnd NE '' and Not(Num(EntryDtEnd)) then EntryDtEnd = IConv(EntryDtEnd, 'D')
|
||||
If RetireDtStart NE '' and Not(Num(RetireDtStart)) then RetireDtStart = IConv(RetireDtStart, 'D')
|
||||
If RetireDtEnd NE '' and Not(Num(RetireDtEnd)) then RetireDtEnd = IConv(RetireDtEnd, 'D')
|
||||
Open 'DICT.REACT_ITEM' to DictReactItem then
|
||||
SearchString = ''
|
||||
If RIType NE '' then
|
||||
Swap ',' with @VM in RIType
|
||||
SearchString := 'RI_TYPE':@VM:RIType:@FM
|
||||
end
|
||||
Begin Case
|
||||
Case ( (EntryDtStart NE '') and (EntryDtEnd NE '') )
|
||||
EntryDtStart = OConv(EntryDtStart - 1, 'D4/')
|
||||
EntryDtEnd = OConv(EntryDtEnd + 1, 'D4/')
|
||||
SearchString := 'ENTER_DT':@VM:EntryDtStart:'~':EntryDtEnd:@FM
|
||||
Case (EntryDtStart NE '')
|
||||
EntryDtStart = OConv(EntryDtStart, 'D4/')
|
||||
SearchString := 'ENTER_DT':@VM:'>=':EntryDtStart:@FM
|
||||
Case (EntryDtEnd NE '')
|
||||
SearchString := 'ENTER_DT':@VM:'<=':EntryDtEnd:@FM
|
||||
Case Otherwise$
|
||||
Null
|
||||
End Case
|
||||
Begin Case
|
||||
Case ( (RetireDtStart NE '') and (RetireDtEnd NE '') )
|
||||
RetireDtStart = OConv(RetireDtStart - 1, 'D4/')
|
||||
RetireDtEnd = OConv(RetireDtEnd + 1, 'D4/')
|
||||
SearchString := 'RETIRE_DT':@VM:RetireDtStart:'~':RetireDtEnd
|
||||
If IncludeNullRetireDt then SearchString := @VM:''
|
||||
SearchString := @FM
|
||||
Case (RetireDtStart NE '')
|
||||
RetireDtStart = OConv(RetireDtStart, 'D4/')
|
||||
SearchString := 'RETIRE_DT':@VM:'>=':RetireDtStart
|
||||
If IncludeNullRetireDt then SearchString := @VM:''
|
||||
SearchString := @FM
|
||||
Case (RetireDtEnd NE '')
|
||||
SearchString := 'RETIRE_DT':@VM:'<=':RetireDtEnd
|
||||
If IncludeNullRetireDt then SearchString := @VM:''
|
||||
SearchString := @FM
|
||||
Case IncludeNullRetireDt
|
||||
SearchString := 'RETIRE_DT':@VM:'':@FM
|
||||
Case Otherwise$
|
||||
Null
|
||||
End Case
|
||||
If CurrStatus NE '' then
|
||||
Swap ',' with @VM in CurrStatus
|
||||
SearchString := 'CURR_STATUS_STATIC':@VM:CurrStatus:@FM
|
||||
end
|
||||
Flag = ''
|
||||
RIKeys = ''
|
||||
Btree.Extract(SearchString, 'REACT_ITEM', DictReactItem, RIKeys, 'E', Flag)
|
||||
If Flag EQ 0 then
|
||||
EnterDtms = Xlate('REACT_ITEM', RIKeys, 'ENTER_DTM', 'X')
|
||||
Array = RIKeys:@FM:EnterDtms
|
||||
Array = SRP_Array('SortRows', Array, 'DN2', 'ARRAY', @FM, @VM)
|
||||
Response = Array<1>
|
||||
end else
|
||||
ErrorMsg = 'Error in ':Service:' service. Error calling Btree.Extract.'
|
||||
end
|
||||
end else
|
||||
Response = RIKeys
|
||||
ErrorMsg = 'Error in ':Service:' service. Error opening REACT_ITEM dictionary.'
|
||||
end
|
||||
|
||||
end else
|
||||
ErrorMsg = 'Error in ':Service:' service. Error opening REACT_ITEM dictionary.'
|
||||
AllKeys = ''
|
||||
RList('SELECT REACT_ITEM', TARGET_ACTIVELIST$, '', '', '')
|
||||
Done = False$
|
||||
Loop
|
||||
Readnext KeyId else Done = True$
|
||||
Until Done
|
||||
AllKeys<1, -1> = KeyId
|
||||
Repeat
|
||||
Response = AllKeys
|
||||
end
|
||||
|
||||
If ErrorMsg NE '' then
|
||||
Error_Services('Add', ErrorMsg)
|
||||
end
|
||||
@ -155,7 +203,6 @@ Service ConvertRecordToJSON(KeyID, Record, ItemURL)
|
||||
|
||||
Response = jsonRecord
|
||||
|
||||
|
||||
end service
|
||||
|
||||
|
||||
@ -326,11 +373,11 @@ Service GetReactItemTemplateJSON()
|
||||
|
||||
Response = jsonRecord
|
||||
|
||||
|
||||
end service
|
||||
|
||||
|
||||
Service CreateReactItem(Record)
|
||||
|
||||
ErrMsg = ''
|
||||
KeyID = ''
|
||||
If Record NE '' then
|
||||
@ -355,6 +402,7 @@ Service CreateReactItem(Record)
|
||||
|
||||
end service
|
||||
|
||||
|
||||
Service ConvertRecordToJSONQuick(KeyID, Record, ItemURL)
|
||||
|
||||
jsonRecord = ''
|
||||
@ -407,6 +455,32 @@ Service ConvertRecordToJSONQuick(KeyID, Record, ItemURL)
|
||||
Response = jsonRecord
|
||||
|
||||
end service
|
||||
|
||||
|
||||
Service UpdateReactItemStatus(RINo)
|
||||
|
||||
If RINo NE '' then
|
||||
If RowExists('REACT_ITEM', RINo) then
|
||||
RIRec = Database_Services('ReadDataRow', 'REACT_ITEM', RINo)
|
||||
If Error_Services('NoError') then
|
||||
Update_Index('REACT_ITEM_HIST', 'RI_NO', False$, True$)
|
||||
ReactItemCurrStatus = obj_React_Item('CurrStatus', RINo:@RM:RIRec)
|
||||
ReactItemCurrStatusStatic = RIRec<REACT_ITEM_CURR_STATUS_STATIC$>
|
||||
If ReactItemCurrStatus NE ReactItemCurrStatusStatic then
|
||||
Open 'REACT_ITEM' to hTable then
|
||||
WriteV ReactItemCurrStatus on hTable, RINo, REACT_ITEM_CURR_STATUS_STATIC$ else
|
||||
Error_Services('Add', 'Error in ':Service:' service. Error writing CURR_STATUS_STATIC, ':ReactItemCurrStatus:', for REACT_ITEM ':RINo:'.')
|
||||
end
|
||||
end else
|
||||
Error_Services('Add', 'Error in ':Service:' service. Error opening REACT_ITEM table for status update.')
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
end service
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Internal GoSubs
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
@ -419,6 +493,3 @@ ClearCursors:
|
||||
|
||||
return
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -79,6 +79,7 @@ Service CreateReturnToFabRecord(CassId, UserId)
|
||||
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_MANUF',NOTIFICATION_USER_ID$,'X')
|
||||
Recipients<1, -1> = XLATE('NOTIFICATION','RETURN_TO_FAB_GENERAL',NOTIFICATION_USER_ID$,'X')
|
||||
Recipients<1, -1> = UserId
|
||||
SentFrom = 'OI_ADMIN'
|
||||
Subject = 'Return To Fab Form Created'
|
||||
@ -475,6 +476,7 @@ Service SetBinToBin(RTFId, MHUserId)
|
||||
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_MANUF',NOTIFICATION_USER_ID$,'X')
|
||||
Recipients<1, -1> = XLATE('NOTIFICATION','RETURN_TO_FAB_GENERAL',NOTIFICATION_USER_ID$,'X')
|
||||
Recipients<1, -1> = RTFOrigUser
|
||||
SentFrom = 'OI_ADMIN'
|
||||
Subject = 'Return To Fab Form Updated'
|
||||
@ -549,6 +551,7 @@ Service SetRTFCompleted(RTFId, CompleteUserId)
|
||||
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_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$>
|
||||
SentFrom = 'OI_ADMIN'
|
||||
Subject = 'Return To Fab Form Completed'
|
||||
@ -623,6 +626,7 @@ Service SetEvalInfo(RTFId, EvalUserId, ResultId)
|
||||
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_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$>
|
||||
SentFrom = 'OI_ADMIN'
|
||||
Subject = 'Return To Fab Form Updated'
|
||||
@ -822,3 +826,4 @@ end service
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -45,9 +45,9 @@ $insert RDS_EQUATES
|
||||
$insert SCAN_SETUP
|
||||
|
||||
Declare Function Scan_Services, Database_Services, QA_Services, Datetime, RDS_Services, SRP_Array, SRP_Stopwatch
|
||||
Declare function Logging_Services, Environment_Services
|
||||
Declare function Logging_Services, Environment_Services, GetTickCount
|
||||
Declare Subroutine Scan_Services, Database_Services, QA_Services, obj_WO_Mat_Log, SRP_Stopwatch
|
||||
Declare Subroutine Logging_Services
|
||||
Declare Subroutine Logging_Services, Mona_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.
|
||||
LogDate = Oconv(Date(), 'D4/')
|
||||
@ -58,6 +58,13 @@ 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.
|
||||
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
|
||||
// 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.')
|
||||
@ -72,16 +79,25 @@ Return Response OR ''
|
||||
|
||||
|
||||
API scan.POST
|
||||
StartTick = GetTickCount()
|
||||
MetricName = 'SCAN_POST'
|
||||
|
||||
SRP_Stopwatch('Reset')
|
||||
SRP_Stopwatch('Start', 'SCAN_POST_RESPONSE_TIME')
|
||||
ScanID = Scan_Services('CreateScansRow')
|
||||
If Error_Services('NoError') then
|
||||
StatusCode = 201
|
||||
GoSub CreateHALItem
|
||||
Mona_Services('SendStatus', MonaResource, MetricName, 'OK')
|
||||
end else
|
||||
Message = Error_Services('GetMessage')
|
||||
HTTP_Services('SetResponseStatus', 500, Message)
|
||||
Mona_Services('SendStatus', MonaResource, MetricName, 'CRITICAL')
|
||||
end
|
||||
|
||||
EndTick = GetTickCount()
|
||||
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
|
||||
|
||||
SRP_Stopwatch('Stop', 'SCAN_POST_RESPONSE_TIME')
|
||||
TotalPostResponseTime = SRP_Stopwatch('GetData', 'SCAN_POST_RESPONSE_TIME')
|
||||
LogData = ''
|
||||
@ -100,6 +116,9 @@ end api
|
||||
|
||||
|
||||
API scan.ID.POST
|
||||
StartTick = GetTickCount()
|
||||
MetricName = 'SCAN_ID_POST'
|
||||
|
||||
SRP_Stopwatch('Reset')
|
||||
SRP_Stopwatch('Start', 'SCAN_ID_POST_RESPONSE_TIME')
|
||||
ScanID = EndpointSegment
|
||||
@ -112,13 +131,20 @@ API scan.ID.POST
|
||||
If Error_Services('NoError') then
|
||||
StatusCode = 200
|
||||
GoSub CreateHALItem
|
||||
Mona_Services('SendStatus', MonaResource, MetricName, 'OK')
|
||||
end else
|
||||
Message = Error_Services('GetMessage')
|
||||
HTTP_Services('SetResponseStatus', 400, Message)
|
||||
Mona_Services('SendStatus', MonaResource, MetricName, 'CRITICAL')
|
||||
end
|
||||
end else
|
||||
HTTP_Services('SetResponseStatus', 400, 'JSON object is missing from the request.')
|
||||
Mona_Services('SendStatus', MonaResource, MetricName, 'WARNING')
|
||||
end
|
||||
|
||||
EndTick = GetTickCount()
|
||||
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
|
||||
|
||||
SRP_Stopwatch('Stop', 'SCAN_ID_POST_RESPONSE_TIME')
|
||||
TotalPostResponseTime = SRP_Stopwatch('GetData', 'SCAN_ID_POST_RESPONSE_TIME')
|
||||
LogData = ''
|
||||
@ -143,11 +169,19 @@ end api
|
||||
|
||||
API scan.ID.HEAD
|
||||
API scan.ID.GET
|
||||
StartTick = GetTickCount()
|
||||
MetricName = 'SCAN_ID_GET'
|
||||
|
||||
SRP_Stopwatch('Reset')
|
||||
SRP_Stopwatch('Start', 'SCAN_ID_GET_RESPONSE_TIME')
|
||||
ScanID = EndpointSegment
|
||||
StatusCode = 200
|
||||
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')
|
||||
TotalGetResponseTime = SRP_Stopwatch('GetData', 'SCAN_ID_GET_RESPONSE_TIME')
|
||||
LogData = ''
|
||||
@ -166,6 +200,9 @@ end api
|
||||
|
||||
|
||||
API scan.ID.DELETE
|
||||
StartTick = GetTickCount()
|
||||
MetricName = 'SCAN_ID_DELETE'
|
||||
|
||||
SRP_Stopwatch('Reset')
|
||||
SRP_Stopwatch('Start', 'SCAN_ID_DELETE_RESPONSE_TIME')
|
||||
ScanID = EndpointSegment
|
||||
@ -176,17 +213,25 @@ API scan.ID.DELETE
|
||||
Database_Services('DeleteDataRow', 'SCANS', ScanID, True$, False$)
|
||||
If Error_Services('NoError') then
|
||||
HTTP_Services('SetResponseStatus', 200)
|
||||
Mona_Services('SendStatus', MonaResource, MetricName, 'OK')
|
||||
end else
|
||||
Message = Error_Services('GetMessage')
|
||||
HTTP_Services('SetResponseStatus', 500, Message)
|
||||
Mona_Services('SendStatus', MonaResource, MetricName, 'CRITICAL')
|
||||
end
|
||||
end else
|
||||
HTTP_Services('SetResponseStatus', 403, 'This scan is already accepted and cannot be deleted.')
|
||||
Mona_Services('SendStatus', MonaResource, MetricName, 'OK')
|
||||
end
|
||||
end else
|
||||
Message = Error_Services('GetMessage')
|
||||
HTTP_Services('SetResponseStatus', 404, Message)
|
||||
Mona_Services('SendStatus', MonaResource, MetricName, 'WARNING')
|
||||
end
|
||||
|
||||
EndTick = GetTickCount()
|
||||
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
|
||||
|
||||
SRP_Stopwatch('Stop', 'SCAN_ID_DELETE_RESPONSE_TIME')
|
||||
TotalDeleteResponseTime = SRP_Stopwatch('GetData', 'SCAN_ID_DELETE_RESPONSE_TIME')
|
||||
LogData = ''
|
||||
@ -205,6 +250,8 @@ end api
|
||||
|
||||
|
||||
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
|
||||
// of scan this is (i.e. Location, Pre-Epi + Load, or Unload). This will be determined by the data coming in and the
|
||||
@ -232,14 +279,17 @@ API scan.ID.PATCH
|
||||
If Error_Services('NoError') then
|
||||
StatusCode = 200
|
||||
GoSub CreateHALItem
|
||||
Mona_Services('SendStatus', MonaResource, MetricName, 'OK')
|
||||
end else
|
||||
Message = Error_Services('GetMessage')
|
||||
HTTP_Services('SetResponseStatus', 500, Message)
|
||||
Mona_Services('SendStatus', MonaResource, MetricName, 'CRITICAL')
|
||||
end
|
||||
|
||||
SRP_JSON(hBody, 'Release')
|
||||
end else
|
||||
HTTP_Services('SetResponseStatus', 400, 'JSON object is missing from the request.')
|
||||
Mona_Services('SendStatus', MonaResource, MetricName, 'WARNING')
|
||||
end
|
||||
end else
|
||||
ScanNotAcceptableReason = SRP_JSON(objResource, 'GetValue', 'scan.notAcceptableReason')
|
||||
@ -249,11 +299,17 @@ API scan.ID.PATCH
|
||||
end else
|
||||
Message = 'Unable to parse the JSON scan resource.'
|
||||
HTTP_Services('SetResponseStatus', 400, Message)
|
||||
Mona_Services('SendStatus', MonaResource, MetricName, 'WARNING')
|
||||
end
|
||||
end else
|
||||
Message = Error_Services('GetMessage')
|
||||
HTTP_Services('SetResponseStatus', 404, Message)
|
||||
Mona_Services('SendStatus', MonaResource, MetricName, 'WARNING')
|
||||
end
|
||||
|
||||
EndTick = GetTickCount()
|
||||
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
|
||||
|
||||
SRP_Stopwatch('Stop', 'SCAN_ID_PATCH_RESPONSE_TIME')
|
||||
TotalPatchResponseTime = SRP_Stopwatch('GetData', 'SCAN_ID_PATCH_RESPONSE_TIME')
|
||||
LogData = ''
|
||||
@ -272,6 +328,8 @@ end api
|
||||
|
||||
|
||||
API scan.ID.PUT
|
||||
StartTick = GetTickCount()
|
||||
MetricName = 'SCAN_ID_PUT'
|
||||
|
||||
SRP_Stopwatch('Reset')
|
||||
SRP_Stopwatch('Start', 'SCAN_ID_PUT_RESPONSE_TIME')
|
||||
@ -314,17 +372,25 @@ API scan.ID.PUT
|
||||
Database_Services('WriteDataRow', 'SCANS', ScanID, ScanRow, True$, False$, True$)
|
||||
If Error_Services('NoError') then
|
||||
GoSub CreateHALItem
|
||||
Mona_Services('SendStatus', MonaResource, MetricName, 'OK')
|
||||
end else
|
||||
Message = Error_Services('GetMessage')
|
||||
HTTP_Services('SetResponseStatus', 500, Message)
|
||||
Mona_Services('SendStatus', MonaResource, MetricName, 'CRITICAL')
|
||||
end
|
||||
SRP_JSON(hBody, 'Release')
|
||||
end else
|
||||
HTTP_Services('SetResponseStatus', 400, 'Unable to parse the scanData JSON.')
|
||||
Mona_Services('SendStatus', MonaResource, MetricName, 'WARNING')
|
||||
end
|
||||
end else
|
||||
HTTP_Services('SetResponseStatus', 400, 'JSON object is missing from the request.')
|
||||
Mona_Services('SendStatus', MonaResource, MetricName, 'WARNING')
|
||||
end
|
||||
|
||||
EndTick = GetTickCount()
|
||||
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
|
||||
|
||||
SRP_Stopwatch('Stop', 'SCAN_ID_PUT_RESPONSE_TIME')
|
||||
TotalPutResponseTime = SRP_Stopwatch('GetData', 'SCAN_ID_PUT_RESPONSE_TIME')
|
||||
LogData = ''
|
||||
@ -339,7 +405,6 @@ API scan.ID.PUT
|
||||
end
|
||||
LogData<6> = ResponseStatusCode
|
||||
Logging_Services('AppendLog', objLog, LogData, @RM, @FM, False$)
|
||||
|
||||
end api
|
||||
|
||||
|
||||
@ -378,3 +443,4 @@ CreateHALItem:
|
||||
end
|
||||
|
||||
return
|
||||
|
||||
|
@ -47,9 +47,10 @@ 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 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 GetTickCount
|
||||
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 Test_Run_Services, WO_MAT_Services, Reactor_Log_Services, Schedule_Services
|
||||
Declare Subroutine Test_Run_Services, WO_MAT_Services, Reactor_Log_Services, Schedule_Services, Mona_Services
|
||||
|
||||
Equ CRLF$ to \0D0A\
|
||||
|
||||
@ -61,6 +62,13 @@ Headers = 'Logging DTM' : @FM : 'RDS Key ID' : @FM : 'User' : @FM : 'CurrSta
|
||||
objLog = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, Comma$, Headers, '', False$, False$)
|
||||
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
|
||||
Error_Services('Add', Service : ' is not a valid service request within the ' : ServiceModule : ' module.')
|
||||
end
|
||||
@ -200,6 +208,8 @@ end service
|
||||
// Returns the database row from the SCANS table for the indicated Scan ID. The default format is MultiValue.
|
||||
//----------------------------------------------------------------------------------------------------------------------
|
||||
Service GetScansRow(ScanID, ReturnJSON)
|
||||
StartTick = GetTickCount()
|
||||
MetricName = 'GetScansRow'
|
||||
|
||||
ScansRow = ''
|
||||
|
||||
@ -214,6 +224,8 @@ Service GetScansRow(ScanID, ReturnJSON)
|
||||
|
||||
Response = ScansRow
|
||||
|
||||
EndTick = GetTickCount()
|
||||
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
|
||||
end service
|
||||
|
||||
|
||||
@ -223,6 +235,8 @@ end service
|
||||
// Returns the database row from the SCANS table for the indicated Scan ID. The default format is MultiValue.
|
||||
//----------------------------------------------------------------------------------------------------------------------
|
||||
Service SetScansRow(ScanID, ScansRow)
|
||||
StartTick = GetTickCount()
|
||||
MetricName = 'SetScansRow'
|
||||
|
||||
If (ScanID NE '') AND (ScansRow NE '') then
|
||||
Database_Services('WriteDataRow', 'SCANS', ScanID, ScansRow)
|
||||
@ -230,6 +244,8 @@ Service SetScansRow(ScanID, ScansRow)
|
||||
Error_Services('Add', 'ScanID or ScansRow argument was missing in the ' : Service : ' service.')
|
||||
end
|
||||
|
||||
EndTick = GetTickCount()
|
||||
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
|
||||
end service
|
||||
|
||||
|
||||
@ -242,6 +258,8 @@ end service
|
||||
// evaluated on a case by case basis.
|
||||
//----------------------------------------------------------------------------------------------------------------------
|
||||
Service ProcessScanData(ScanID, ScanJSON)
|
||||
StartTick = GetTickCount()
|
||||
MetricName = 'ProcessScanData'
|
||||
|
||||
If ( (ScanID NE '') AND (ScanJSON NE '') ) then
|
||||
hScanJSON = ''
|
||||
@ -335,6 +353,18 @@ Service ProcessScanData(ScanID, ScanJSON)
|
||||
Error_Services('Add', 'Inactive employee.')
|
||||
Case Otherwise$
|
||||
ScansRow<SCANS.EMPLOYEE_ID$> = {EMPLOYEE_ID}
|
||||
|
||||
Username = {EMPLOYEE_ID}
|
||||
|
||||
Member = False$
|
||||
Groups = 'LEAD':@VM:'SUPERVISOR':@VM:'ENGINEER':@VM:'ENG_TECH':@VM:'ROTR_OVERRIDE'
|
||||
|
||||
For each Group in Groups using @VM
|
||||
Member = MemberOf(Username, Group)
|
||||
Until Member EQ True$
|
||||
Next Group
|
||||
|
||||
ScansRow<SCANS.IS_AUTHORIZED_TO_OVERRIDE_ROTR$> = Member
|
||||
End Case
|
||||
|
||||
Case ScanData[1, 3] EQ '10S'
|
||||
@ -520,6 +550,9 @@ Service ProcessScanData(ScanID, ScanJSON)
|
||||
Database_Services('WriteDataRow', 'REACTOR', Reactor, ReactorRec, True$, False$, True$)
|
||||
Database_Services('WriteDataRow', 'RDS', RDSNo, RDSRec, True$, False$, True$)
|
||||
|
||||
ScansRow<SCANS.OVERRIDE_REQD$> = 0
|
||||
ScansRow<SCANS.OVERRIDE_TYPE$> = ''
|
||||
ScansRow<SCANS.OVERRIDE_REASON$> = ''
|
||||
ScansRow<SCANS.EMPLOYEE_ID$>= ''
|
||||
Result = 'Override Performed successfully'
|
||||
end
|
||||
@ -652,6 +685,7 @@ Service ProcessScanData(ScanID, ScanJSON)
|
||||
If (CassetteIDs NE '') then
|
||||
TestWaferLotData = ScansRow<SCANS.TW_LOT_ID$>
|
||||
Abort = False$
|
||||
TestWaferLotIsValid = False$
|
||||
If TestWaferLotData NE '' then
|
||||
ThisTestRunType = ScansRow<SCANS.TEST_RUN_TYPE_ID$>
|
||||
If ThisTestRunType NE '' then
|
||||
@ -667,6 +701,8 @@ Service ProcessScanData(ScanID, ScanJSON)
|
||||
If Not(TWLotCurrOpen) then
|
||||
Abort = True$
|
||||
Scan_Services('AddNotAcceptableReason', 'Lot ':TWLot:' is closed and cannot be used at this time.')
|
||||
end else
|
||||
TestWaferLotIsValid = True$
|
||||
end
|
||||
end else
|
||||
Abort = True$
|
||||
@ -1090,6 +1126,60 @@ Service ProcessScanData(ScanID, ScanJSON)
|
||||
Case Otherwise$
|
||||
// Keep error on Error_Services stack and return 400 level error.
|
||||
End Case
|
||||
end else
|
||||
ReactorNo = Xlate('RDS', RDSNo, RDS_REACTOR$, 'X')
|
||||
ReactorType = Xlate('REACTOR', ReactorNo, REACTOR_REACT_TYPE$, 'X')
|
||||
If Len(ReactorType) GE 3 and ReactorType[1, 3] _EQC 'HTR' then
|
||||
WO = Xlate('RDS', RDSNo, RDS_WO$, 'X')
|
||||
CassNo = Xlate('RDS', RDSNo, 'RUN_ORDER_NUM', 'X')
|
||||
WoMatKey = WO:'*':CassNo
|
||||
WoMatRec = Database_Services('ReadDataRow', 'WO_MAT', WoMatKey)
|
||||
LastCassInWoTestWaferAckReq = WoMatRec<WO_MAT_LAST_CASSETTE_TEST_WAFER_ACK_REQ$>
|
||||
LastCassInWoTestWaferAcked = WoMatRec<WO_MAT_LAST_CASSETTE_TEST_WAFER_ACKED$>
|
||||
LastCassInWoTestWaferReqMsg = ''
|
||||
If LastCassInWoTestWaferAcked EQ False$ or LastCassInWoTestWaferAcked EQ '' then
|
||||
LastCassInWo = WO_MAT_Services('CassetteIsLastInWo', WoMatKey)
|
||||
|
||||
If LastCassInWo then
|
||||
NextEventScheduled = False$
|
||||
NextEventHasSamePsn = True$
|
||||
NextEventIsBlock = False$
|
||||
|
||||
NextScheduledEvent = Schedule_Services('GetNextEvent', ReactorNo)
|
||||
If Error_Services('NoError') then
|
||||
NextEventScheduled = True$
|
||||
|
||||
NextEventHasSamePsn = Schedule_Services('NextEventIsSamePsn', ReactorNo)
|
||||
NextEventIsBlock = Schedule_Services('NextEventIsBlock', ReactorNo)
|
||||
end
|
||||
|
||||
If NextEventScheduled EQ False$ or NextEventHasSamePsn EQ False$ or NextEventIsBlock EQ True$ then
|
||||
LastCassInWoTestWaferAckReq = True$
|
||||
WoMatRec<WO_MAT_LAST_CASSETTE_TEST_WAFER_ACK_REQ$> = LastCassInWoTestWaferAckReq
|
||||
TestWaferRanSinceLoad = WoMatRec<WO_MAT_LAST_CASSETTE_TEST_WAFER_RAN$> or TestWaferLotIsValid EQ True$
|
||||
|
||||
If TestWaferLotIsValid NE True$ and TestWaferRanSinceLoad NE True$ then
|
||||
TestWaferRanSinceLoad = Rds_Services('TestWaferRanAfterLoad', RDSNo)
|
||||
|
||||
If TestWaferRanSinceLoad NE True$ then
|
||||
LastCassInWoTestWaferReqMsg = ''
|
||||
If NextEventScheduled EQ False$ or NextEventIsBlock EQ True$ then
|
||||
LastCassInWoTestWaferReqMsg = 'No material scheduled. Test wafer required.'
|
||||
end else If NextEventHasSamePsn EQ False$ then
|
||||
LastCassInWoTestWaferReqMsg = 'Next work order is a NEW PSN number. Test wafer required.'
|
||||
end
|
||||
|
||||
Scan_Services('AddNotAcceptableReason', LastCassInWoTestWaferReqMsg)
|
||||
end
|
||||
end
|
||||
|
||||
WoMatRec<WO_MAT_LAST_CASSETTE_TEST_WAFER_RAN$> = TestWaferRanSinceLoad
|
||||
|
||||
Database_Services('WriteDataRow', 'WO_MAT', WoMatKey, WoMatRec, True$, False$, False$)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end else
|
||||
ScanMsg = 'The POST stage engineering instructions must be acknowledged before the load operation can be signed.'
|
||||
@ -1215,6 +1305,8 @@ Service ProcessScanData(ScanID, ScanJSON)
|
||||
Error_Services('Add', 'ScanID or ScanJSON argument was missing in the ' : Service : ' service.')
|
||||
end
|
||||
|
||||
EndTick = GetTickCount()
|
||||
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
|
||||
end service
|
||||
|
||||
|
||||
@ -1223,6 +1315,9 @@ end service
|
||||
//
|
||||
//----------------------------------------------------------------------------------------------------------------------
|
||||
Service AcceptScan(ScanID, ScanJSON)
|
||||
StartTick = GetTickCount()
|
||||
MetricName = 'AcceptScan'
|
||||
|
||||
If ( (ScanID NE '') and (ScanJSON NE '') ) then
|
||||
hBody = ''
|
||||
ParseResponse = SRP_JSON(hBody, 'PARSE', ScanJSON)
|
||||
@ -1403,6 +1498,7 @@ Service AcceptScan(ScanID, ScanJSON)
|
||||
LogData<3> = Username
|
||||
LogData<4> = CurrStage
|
||||
LogData<5> = ScanID
|
||||
|
||||
Begin Case
|
||||
Case CurrStage _EQC 'VER'
|
||||
Action = 'LOAD'
|
||||
@ -1493,14 +1589,32 @@ Service AcceptScan(ScanID, ScanJSON)
|
||||
|
||||
Case CurrStage _EQC 'UNLOAD'
|
||||
Action = 'UNLOAD'
|
||||
// Check if UNLOAD stage is ready to sign
|
||||
UnloadStageSigned = QA_Services('SignUnloadStage', RDSNo, Username, 1)
|
||||
If UnloadStageSigned EQ True$ then
|
||||
Result = '(':CassetteID:') Unload stage signed.'
|
||||
Continue = True$
|
||||
If TestWaferLots NE '' then
|
||||
ToolID = ScansRow<SCANS.TOOL_ID$>
|
||||
Reactor = ToolID[-1, 'BR']
|
||||
Username = ScansRow<SCANS.EMPLOYEE_ID$>
|
||||
TestWaferLotQtys = ScansRow<SCANS.TW_LOT_QTY$>
|
||||
TestRunType = ScansRow<SCANS.TEST_RUN_TYPE_ID$>
|
||||
PSNo = Xlate('RDS', RDSNo, RDS_PROD_SPEC_ID$, True$, 'X')
|
||||
NewTestRunId = Test_Run_Services('CreateTestRunRecord', TestRunType, 'R', Reactor, PSNo, RDSNo,Username , TestWaferLots, TestWaferLotQtys)
|
||||
If Error_Services('HasError') then
|
||||
ErrorMessage = Error_Services('GetMessage')
|
||||
Error_Services('Set', ErrorMessage)
|
||||
Continue = False$
|
||||
end
|
||||
end
|
||||
|
||||
If Continue EQ True$ then
|
||||
// Check if UNLOAD stage is ready to sign
|
||||
UnloadStageSigned = QA_Services('SignUnloadStage', RDSNo, Username, 1)
|
||||
If UnloadStageSigned EQ True$ then
|
||||
Result = '(':CassetteID:') Unload stage signed.'
|
||||
end
|
||||
LogData<6> = Action
|
||||
LogData<7> = Result
|
||||
Logging_Services('AppendLog', objLog, LogData, @RM, @FM)
|
||||
end
|
||||
LogData<6> = Action
|
||||
LogData<7> = Result
|
||||
Logging_Services('AppendLog', objLog, LogData, @RM, @FM)
|
||||
Case CurrStage _EQC 'COMP'
|
||||
Action = 'COMP'
|
||||
Error_Services('Set', '(':CassetteID:") Cassette has already been FQA'd.")
|
||||
@ -1558,6 +1672,8 @@ Service AcceptScan(ScanID, ScanJSON)
|
||||
Error_Services('Add', 'ScanID or ScanJSON argument was missing in the ' : Service : ' service.')
|
||||
end
|
||||
|
||||
EndTick = GetTickCount()
|
||||
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
|
||||
end service
|
||||
|
||||
//----------------------------------------------------------------------------------------------------------------------
|
||||
@ -1568,6 +1684,8 @@ end service
|
||||
// HAL+JSON properties will be added to the JSON object.
|
||||
//----------------------------------------------------------------------------------------------------------------------
|
||||
Service ConvertMVScanToJSON(ScanID, mvScan, itemURL)
|
||||
StartTick = GetTickCount()
|
||||
MetricName = 'ConvertMVScanToJSON'
|
||||
|
||||
jsonScan = ''
|
||||
|
||||
@ -1674,6 +1792,7 @@ Service ConvertMVScanToJSON(ScanID, mvScan, itemURL)
|
||||
SRP_JSON(objEmployee, 'SetValue', 'authorized', {EMPLOYEE_AUTHORIZED}, 'Boolean')
|
||||
SRP_JSON(objEmployee, 'SetValue', 'notAuthorizedReason', {EMPLOYEE_NOT_AUTHORIZED_REASON}, 'String')
|
||||
SRP_JSON(objEmployee, 'SetValue', 'authenticated' , @Record<SCANS.AUTHENTICATED$> , 'Boolean');//JRO Change
|
||||
SRP_JSON(objEmployee, 'SetValue', 'isAuthorizedToOverrideROTR', @Record<SCANS.IS_AUTHORIZED_TO_OVERRIDE_ROTR$>, 'Boolean')
|
||||
SRP_JSON(objJSONScan, 'Set', 'employee', objEmployee)
|
||||
SRP_JSON(objEmployee, 'Release')
|
||||
|
||||
@ -1787,52 +1906,6 @@ Service ConvertMVScanToJSON(ScanID, mvScan, itemURL)
|
||||
end else
|
||||
SupplUnloadInstAckReq = False$
|
||||
end
|
||||
|
||||
ReactorNo = Xlate('RDS', RDSNo, RDS_REACTOR$, 'X')
|
||||
ReactorType = Xlate('REACTOR', ReactorNo, REACTOR_REACT_TYPE$, 'X')
|
||||
If Len(ReactorType) GE 3 and ReactorType[1, 3] _EQC 'HTR' then
|
||||
WO = Xlate('RDS', RDSNo, RDS_WO$, 'X')
|
||||
CassNo = Xlate('RDS', RDSNo, 'RUN_ORDER_NUM', 'X')
|
||||
WoMatKey = WO:'*':CassNo
|
||||
WoMatRec = Database_Services('ReadDataRow', 'WO_MAT', WoMatKey)
|
||||
LastCassInWoTestWaferAckReq = WoMatRec<WO_MAT_LAST_CASSETTE_TEST_WAFER_ACK_REQ$>
|
||||
LastCassInWoTestWaferAcked = WoMatRec<WO_MAT_LAST_CASSETTE_TEST_WAFER_ACKED$>
|
||||
LastCassInWoTestWaferReqMsg = ''
|
||||
If LastCassInWoTestWaferAcked EQ False$ or LastCassInWoTestWaferAcked EQ '' then
|
||||
LastCassInWo = WO_MAT_Services('CassetteIsLastInWo', WoMatKey)
|
||||
|
||||
If LastCassInWo then
|
||||
NextEventScheduled = False$
|
||||
NextEventHasSamePsn = True$
|
||||
NextEventIsBlock = False$
|
||||
|
||||
NextScheduledEvent = Schedule_Services('GetNextEvent', ReactorNo)
|
||||
If Error_Services('NoError') then
|
||||
NextEventScheduled = True$
|
||||
|
||||
NextEventHasSamePsn = Schedule_Services('NextEventIsSamePsn', ReactorNo)
|
||||
NextEventIsBlock = Schedule_Services('NextEventIsBlock', ReactorNo)
|
||||
end
|
||||
|
||||
If NextEventScheduled EQ False$ or NextEventHasSamePsn EQ False$ or NextEventIsBlock EQ True$ then
|
||||
LastCassInWoTestWaferAckReq = True$
|
||||
WoMatRec<WO_MAT_LAST_CASSETTE_TEST_WAFER_ACK_REQ$> = LastCassInWoTestWaferAckReq
|
||||
WoMatRec<WO_MAT_LAST_CASSETTE_TEST_WAFER_ACKED$> = LastCassInWoTestWaferAcked
|
||||
Database_Services('WriteDataRow', 'WO_MAT', WoMatKey, WoMatRec, True$, False$, False$)
|
||||
|
||||
LastCassInWoTestWaferReqMsg = ''
|
||||
If NextEventScheduled EQ False$ or NextEventIsBlock EQ True$ then
|
||||
LastCassInWoTestWaferReqMsg = 'No material scheduled. Test wafer required.'
|
||||
end else If NextEventHasSamePsn EQ False$ then
|
||||
LastCassInWoTestWaferReqMsg = 'Next work order is a NEW PSN number. Test wafer required.'
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
SRP_JSON(objRDS, 'SetValue', 'lastCassInWoTestWaferAckReq', LastCassInWoTestWaferAckReq, 'Boolean')
|
||||
SRP_JSON(objRDS, 'SetValue', 'lastCassInWoTestWaferAcked', LastCassInWoTestWaferAcked, 'Boolean')
|
||||
SRP_JSON(objRDS, 'SetValue', 'lastCassInWoTestWaferAckReqMsg', LastCassInWoTestWaferReqMsg, 'String')
|
||||
end
|
||||
end else
|
||||
SupplUnloadInstAckReq = False$
|
||||
end
|
||||
@ -2114,6 +2187,8 @@ Service ConvertMVScanToJSON(ScanID, mvScan, itemURL)
|
||||
|
||||
Response = jsonScan
|
||||
|
||||
EndTick = GetTickCount()
|
||||
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
|
||||
end service
|
||||
|
||||
//----------------------------------------------------------------------------------------------------------------------
|
||||
@ -2350,8 +2425,3 @@ ClearCursors:
|
||||
|
||||
return
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -55,16 +55,24 @@ EQU NOTIFICATION_PERIOD$ TO 12
|
||||
|
||||
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 Mona_Services
|
||||
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 Work_Order_Services, RTI_CreateGUID, Reactor_Services, Schedule_Services, NextKey, SRP_Datetime
|
||||
Declare function SRP_Time, Lsl_Users_Services
|
||||
Declare function SRP_Time, Lsl_Users_Services, GetTickCount
|
||||
|
||||
Date = Oconv(Date(), 'D4/')
|
||||
LogFileName = Date[7, 4] : '-' : Date[1, 2] : '-' : Date[4, 2] : ' Scheduler Log.csv'
|
||||
Headers = 'Logging DTM' : @FM : 'Service Step' : @FM : 'Service Notes'
|
||||
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
|
||||
Error_Services('Set', Service : ' is not a valid service request within the ' : ServiceModule : ' services module.')
|
||||
end
|
||||
@ -795,6 +803,8 @@ end service
|
||||
|
||||
|
||||
Service GetCurrentEvent(ReactNo)
|
||||
StartTick = GetTickCount()
|
||||
MetricName = 'GetCurrentEvent'
|
||||
|
||||
SchedDetKey = ''
|
||||
If ReactNo NE '' then
|
||||
@ -814,9 +824,14 @@ Service GetCurrentEvent(ReactNo)
|
||||
GoSub ClearCursors
|
||||
end
|
||||
|
||||
EndTick = GetTickCount()
|
||||
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
|
||||
end service
|
||||
|
||||
Service CurrentEventIsBlock(ReactNo)
|
||||
StartTick = GetTickCount()
|
||||
MetricName = 'CurrentEventIsBlock'
|
||||
|
||||
If ReactNo NE '' then
|
||||
CurrentSchedDetKey = Schedule_Services('GetCurrentEvent', ReactNo)
|
||||
|
||||
@ -838,9 +853,15 @@ Service CurrentEventIsBlock(ReactNo)
|
||||
ErrorMsg = 'Error in service ':Service:' module. Invalid reactor number.'
|
||||
Error_Services('Add', ErrorMsg)
|
||||
end
|
||||
|
||||
EndTick = GetTickCount()
|
||||
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
|
||||
end service
|
||||
|
||||
Service GetNextEvent(ReactNo)
|
||||
StartTick = GetTickCount()
|
||||
MetricName = 'GetNextEvent'
|
||||
|
||||
SchedDetKey = ''
|
||||
If ReactNo NE '' then
|
||||
CurrDTM = Datetime()
|
||||
@ -870,6 +891,9 @@ Service GetNextEvent(ReactNo)
|
||||
end
|
||||
GoSub ClearCursors
|
||||
end
|
||||
|
||||
EndTick = GetTickCount()
|
||||
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
|
||||
end service
|
||||
|
||||
Service GetEngagedEvent(ReactNo)
|
||||
@ -919,6 +943,9 @@ Service GetLastEngagedEvent(ReactNo)
|
||||
end service
|
||||
|
||||
Service NextEventIsSamePsn(ReactNo)
|
||||
StartTick = GetTickCount()
|
||||
MetricName = 'NextEventIsSamePsn'
|
||||
|
||||
Response = False$
|
||||
If ReactNo NE '' then
|
||||
CurrentSchedDetKey = Schedule_Services('GetCurrentEvent', ReactNo)
|
||||
@ -962,9 +989,15 @@ Service NextEventIsSamePsn(ReactNo)
|
||||
ErrorMsg = 'Error in service ':Service:' module. Invalid reactor number.'
|
||||
Error_Services('Add', ErrorMsg)
|
||||
end
|
||||
|
||||
EndTick = GetTickCount()
|
||||
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
|
||||
end service
|
||||
|
||||
Service NextEventIsBlock(ReactNo)
|
||||
StartTick = GetTickCount()
|
||||
MetricName = 'NextEventIsBlock'
|
||||
|
||||
If ReactNo NE '' then
|
||||
NextSchedDetKey = Schedule_Services('GetNextEvent', ReactNo)
|
||||
|
||||
@ -986,6 +1019,9 @@ Service NextEventIsBlock(ReactNo)
|
||||
ErrorMsg = 'Error in service ':Service:' module. Invalid reactor number.'
|
||||
Error_Services('Add', ErrorMsg)
|
||||
end
|
||||
|
||||
EndTick = GetTickCount()
|
||||
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
|
||||
end service
|
||||
|
||||
//----------------------------------------------------------------------------------------------------------------------
|
||||
@ -3561,3 +3597,4 @@ CreateScheduleChangeNotification:
|
||||
return
|
||||
|
||||
|
||||
|
||||
|
@ -17,6 +17,7 @@ Subroutine Service_Manager_Debugger_Intercept(Void)
|
||||
|
||||
History : (Date, Initials, Notes)
|
||||
07/25/23 djs Original programmer.
|
||||
06/04/25 djs Added LSL note creation (and email forwarding) to notify OI_ADMIN users when invoked.
|
||||
|
||||
***********************************************************************************************************************/
|
||||
|
||||
@ -24,24 +25,58 @@ Subroutine Service_Manager_Debugger_Intercept(Void)
|
||||
|
||||
$insert APP_INSERTS
|
||||
$insert RTI_DEBUG_COMMON
|
||||
$insert ENVIRON_CONSTANTS
|
||||
|
||||
Declare function Environment_Services, Logging_Services
|
||||
Declare subroutine Logging_Services
|
||||
Declare function Environment_Services, Logging_Services, Environment_Services, GetCommandLine, Datetime
|
||||
Declare subroutine Logging_Services, obj_Notes, Set_Env
|
||||
|
||||
LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\ServiceManager'
|
||||
LogDate = Oconv(Date(), 'D4/')
|
||||
LogTime = Oconv(Time(), 'MTS')
|
||||
LogFileName = LogDate[7, 4] : '-' : LogDate[1, 2] : '-' : LogDate[4, 2] : ' OEngine Log.csv'
|
||||
Headers = 'Stored Proc Status' : @FM : 'Stored Proc Status Code' : @FM : 'Current Program' : @FM : 'Call Depth' : @FM : 'Line No' : @FM : 'Call Stack'
|
||||
objLog = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, ',', Headers, '', False$, False$)
|
||||
LogData = ''
|
||||
LogData<1> = SPStatus@
|
||||
LogData<2> = SPStatCode@
|
||||
LogData<3> = Curr_Program@
|
||||
LogData<4> = CallDepth@
|
||||
LogData<5> = LineNo@
|
||||
LogData<6> = CallStack@
|
||||
Logging_Services('AppendLog', objLog, LogData, @RM, @FM, '', '', '')
|
||||
Main:
|
||||
|
||||
// Log event in .\LogFiles\ServiceManager\<Date> OEngine Log.csv
|
||||
LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\ServiceManager'
|
||||
LogDate = Oconv(Date(), 'D4/')
|
||||
LogTime = Oconv(Time(), 'MTS')
|
||||
LogFileName = LogDate[7, 4] : '-' : LogDate[1, 2] : '-' : LogDate[4, 2] : ' OEngine Log.csv'
|
||||
Headers = 'Stored Proc Status' : @FM : 'Stored Proc Status Code' : @FM : 'Current Program' : @FM
|
||||
Headers := 'Call Depth' : @FM : 'Line No' : @FM : 'Call Stack'
|
||||
objLog = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, ',', Headers, '', False$, False$)
|
||||
LogData = ''
|
||||
LogData<1> = spStatus@
|
||||
LogData<2> = spStatCode@
|
||||
LogData<3> = curr_Program@
|
||||
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
|
||||
|
||||
|
@ -27,19 +27,30 @@ Function Service_Services(@Service, @Params)
|
||||
|
||||
#pragma precomp SRP_PreCompiler
|
||||
|
||||
$insert LOGICAL
|
||||
$insert SERVICE_SETUP
|
||||
$insert SERVICES_EQUATES
|
||||
$insert RLIST_EQUATES
|
||||
$insert SQL_REQUESTS_EQUATES
|
||||
$Insert APP_INSERTS
|
||||
$Insert SERVICE_SETUP
|
||||
$Insert SERVICES_EQUATES
|
||||
$Insert RLIST_EQUATES
|
||||
$Insert SQL_REQUESTS_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@
|
||||
|
||||
Declare function Service_Services, Memory_Services, SRP_List, SRP_FastArray, SRP_Array, Database_Services, Datetime
|
||||
Declare Function GetTickCount, SRP_Decode, RTI_CREATEGUID
|
||||
Declare function GetTickCount, SRP_Decode, RTI_CreateGuid, UCase, Environment_services, Logging_Services
|
||||
Declare subroutine Service_Services, Memory_Services, SRP_List, SRP_FastArray, RList, Set_Status, Database_Services
|
||||
Declare Subroutine Yield, WinYield, Sleepery, Btree.Extract
|
||||
Declare Subroutine Yield, WinYield, Sleepery, Btree.Extract, Logging_Services, obj_Notes
|
||||
|
||||
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
|
||||
Error_Services('Add', Service : ' is not a valid service request within the ' : ServiceModule : ' services module.')
|
||||
@ -165,18 +176,22 @@ Service ProcessProcedureQueue()
|
||||
ReadNext RequestKeyID else EOF = True$
|
||||
Until EOF or Done
|
||||
Lock hProcQueue, RequestKeyID then
|
||||
Done = True$
|
||||
DeleteRequest = True$
|
||||
Server = Environment_Services('GetServer')
|
||||
Done = True$
|
||||
Database_Services('GetKeyIDLock', 'PROC_QUEUE', RequestKeyId)
|
||||
RequestRow = Database_Services('ReadDataRow', 'PROC_QUEUE', RequestKeyID)
|
||||
RequestRow = Database_Services('ReadDataRow', 'PROC_QUEUE', RequestKeyID)
|
||||
If RequestRow NE '' then
|
||||
Procedure = RequestRow<PROC_QUEUE.PROC_NAME$>
|
||||
Procedure = UCase(Procedure)
|
||||
Params = RequestRow<PROC_QUEUE.PARAMS$>
|
||||
If Procedure NE '' then
|
||||
Dim ProcParams(11)
|
||||
Dim ProcParams(12)
|
||||
For each Param in Params using @VM setting pPos
|
||||
ProcParams(pPos) = Param
|
||||
Next Param
|
||||
NumArguments = DCount(Params, @VM)
|
||||
|
||||
Begin Case
|
||||
Case NumArguments EQ 0 ; Call @Procedure()
|
||||
Case NumArguments EQ 1 ; Call @Procedure(ProcParams(1))
|
||||
@ -194,17 +209,58 @@ Service ProcessProcedureQueue()
|
||||
Error_Services('Add', 'Error in ':Service:' service. More than 11 arguments are not currently supported.')
|
||||
End Case
|
||||
end
|
||||
If Error_Services('NoError') then
|
||||
Database_Services('DeleteDataRow', 'PROC_QUEUE', RequestKeyId, True$, False$) ; // This call will release the lock
|
||||
|
||||
Swap @VM with ',' in Params
|
||||
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
|
||||
// Notify OI_SYSADMIN group
|
||||
Recipients = ''
|
||||
SentFrom = 'SYSTEM'
|
||||
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
|
||||
LogData<6> = 'Failed'
|
||||
LogData<7> = 'Error_Services error message: ':ErrorMessage:' Get_Status error code: ':ErrCode
|
||||
end else
|
||||
RequestRow<PROC_QUEUE.LAST_ATTEMPT_DTM$> = DateTime()
|
||||
RequestRow<PROC_QUEUE.ERROR$> = Error_Services('GetMessage')
|
||||
Database_Services('WriteDataRow', 'PROC_QUEUE', RequestKeyID, RequestRow, True$, False$, False$) ; // This call will release the lock
|
||||
LogData<6> = 'Success'
|
||||
end
|
||||
end else
|
||||
// Empty request, so delete it from the queue
|
||||
Database_Services('DeleteDataRow', 'PROC_QUEUE', RequestKeyId, True$, False$) ; // This call will release the lock
|
||||
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
|
||||
Repeat
|
||||
end
|
||||
@ -217,36 +273,32 @@ Service PostProcedure(ProcedureName, Params, Critical=BOOLEAN)
|
||||
If Critical EQ '' then Critical = True$
|
||||
PostToQueue = True$
|
||||
If (ProcedureName NE '') then
|
||||
If (Params NE '') then
|
||||
If Not(Critical) then
|
||||
// Check if there is already a matching request in the queue before posting another one.
|
||||
Query = 'PROC_NAME':@VM:ProcedureName:@FM
|
||||
Query := 'PARAMS':@VM:Params:@FM
|
||||
Open 'DICT.PROC_QUEUE' to hDict then
|
||||
Keys = ''
|
||||
Option = 'E'
|
||||
Flag = ''
|
||||
Btree.Extract(Query, 'PROC_QUEUE', hDict, Keys, Option, Flag)
|
||||
If Flag EQ 0 then
|
||||
If Keys NE '' then PostToQueue = False$
|
||||
end else
|
||||
Error_Services('Add', 'Error in ':Service:' service. Error calling Btree.Extract.')
|
||||
end
|
||||
If Not(Critical) then
|
||||
// Check if there is already a matching request in the queue before posting another one.
|
||||
Query = 'PROC_NAME':@VM:ProcedureName:@FM
|
||||
Query := 'PARAMS':@VM:Params:@FM
|
||||
Open 'DICT.PROC_QUEUE' to hDict then
|
||||
Keys = ''
|
||||
Option = 'E'
|
||||
Flag = ''
|
||||
Btree.Extract(Query, 'PROC_QUEUE', hDict, Keys, Option, Flag)
|
||||
If Flag EQ 0 then
|
||||
If Keys NE '' then PostToQueue = False$
|
||||
end else
|
||||
Error_Services('Add', 'Error in ':Service:' service. Error opening DICT.PROC_QUEUE.')
|
||||
Error_Services('Add', 'Error in ':Service:' service. Error calling Btree.Extract.')
|
||||
end
|
||||
end else
|
||||
Error_Services('Add', 'Error in ':Service:' service. Error opening DICT.PROC_QUEUE.')
|
||||
end
|
||||
If PostToQueue then
|
||||
RequestKeyID = RTI_CreateGUID()
|
||||
RequestRow = ''
|
||||
RequestRow<PROC_QUEUE.PROC_NAME$> = ProcedureName
|
||||
RequestRow<PROC_QUEUE.PARAMS$> = Params
|
||||
RequestRow<PROC_QUEUE.ENTRY_DTM$> = Datetime()
|
||||
Database_Services('WriteDataRow', 'PROC_QUEUE', RequestKeyID, RequestRow, True$, False$, False$)
|
||||
end
|
||||
end else
|
||||
Error_Services('Add', 'Error in ':Service:' service. Null Params passed in.')
|
||||
end
|
||||
end
|
||||
If PostToQueue then
|
||||
RequestKeyID = RTI_CreateGUID()
|
||||
RequestRow = ''
|
||||
RequestRow<PROC_QUEUE.PROC_NAME$> = ProcedureName
|
||||
RequestRow<PROC_QUEUE.PARAMS$> = Params
|
||||
RequestRow<PROC_QUEUE.ENTRY_DTM$> = Datetime()
|
||||
Database_Services('WriteDataRow', 'PROC_QUEUE', RequestKeyID, RequestRow, True$, False$, False$)
|
||||
end
|
||||
end else
|
||||
Error_Services('Add', 'Error in ':Service:' service. Null ProcedureName passed in.')
|
||||
end
|
||||
@ -254,8 +306,98 @@ Service PostProcedure(ProcedureName, Params, Critical=BOOLEAN)
|
||||
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
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
|
@ -63,12 +63,20 @@ Equ COL$TOOL_ID to 10
|
||||
|
||||
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 Environment_Services, GetTickCount
|
||||
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
|
||||
Declare subroutine Obj_Notes, Signature_Services, Obj_WO_Mat_Log, ErrMsg, Mona_Services
|
||||
|
||||
PSNKey = 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
|
||||
|
||||
Return Response or ""
|
||||
@ -135,6 +143,8 @@ end service
|
||||
|
||||
|
||||
Service GetSigProfile(WOMatKey, UseCaching, RDSNo)
|
||||
StartTick = GetTickCount()
|
||||
MetricName = 'GetSigProfile'
|
||||
|
||||
If UseCaching EQ '' then UseCaching = True$
|
||||
|
||||
@ -175,6 +185,8 @@ Service GetSigProfile(WOMatKey, UseCaching, RDSNo)
|
||||
SigDTMs = OCONV(SigDTMs,'DT4/^S')
|
||||
Response = SigProfile:@FM:Signatures:@FM:SigDTMs
|
||||
|
||||
EndTick = GetTickCount()
|
||||
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
|
||||
end service
|
||||
|
||||
|
||||
@ -211,6 +223,9 @@ end service
|
||||
|
||||
|
||||
Service CheckSigOrder(WOMatKey, CurrStage, UseCaching, RDSNo)
|
||||
StartTick = GetTickCount()
|
||||
MetricName = 'CheckSigOrder'
|
||||
|
||||
If UseCaching EQ '' then UseCachine = True$
|
||||
Response = False$
|
||||
If RDSNo NE '' then
|
||||
@ -264,6 +279,8 @@ Service CheckSigOrder(WOMatKey, CurrStage, UseCaching, RDSNo)
|
||||
Response = True$
|
||||
end
|
||||
|
||||
EndTick = GetTickCount()
|
||||
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
|
||||
End Service
|
||||
|
||||
|
||||
@ -2010,20 +2027,17 @@ Service QASigReady(RDSNo)
|
||||
* Verify Unload Stage QA Metrology Tests *
|
||||
******************************************
|
||||
If ErrorMessage EQ '' then
|
||||
DevelopmentFlag = Xlate('DEVELOPMENT', 'HGCV', 'STATUS', 'X')
|
||||
If (DevelopmentFlag EQ True$) then
|
||||
WOMatQAKey = WOMatKey
|
||||
WOMatQARec = Database_Services('ReadDataRow', 'WO_MAT_QA', WOMatQAKey)
|
||||
OutOfSpec = WOMatQARec<WO_MAT_QA_OUT_OF_SPEC$>
|
||||
OutOfSpec = Sum(OutOfSpec)
|
||||
If OutOfSpec GT 0 then
|
||||
FailReasons = WOMatQARec<WO_MAT_QA_FAIL_REASON$>
|
||||
ErrorMessage = 'Error in ':Service:' service. '
|
||||
For each FailReason in FailReasons using @VM
|
||||
ErrorMessage := FailReason:' '
|
||||
Next FailReason
|
||||
end
|
||||
end
|
||||
WOMatQAKey = WOMatKey
|
||||
WOMatQARec = Database_Services('ReadDataRow', 'WO_MAT_QA', WOMatQAKey)
|
||||
OutOfSpec = WOMatQARec<WO_MAT_QA_OUT_OF_SPEC$>
|
||||
OutOfSpec = Sum(OutOfSpec)
|
||||
If OutOfSpec GT 0 then
|
||||
FailReasons = WOMatQARec<WO_MAT_QA_FAIL_REASON$>
|
||||
ErrorMessage = 'Error in ':Service:' service. '
|
||||
For each FailReason in FailReasons using @VM
|
||||
ErrorMessage := FailReason:' '
|
||||
Next FailReason
|
||||
end
|
||||
end
|
||||
|
||||
************************************************************************
|
||||
@ -2844,4 +2858,3 @@ GetMostRecentSig:
|
||||
|
||||
return
|
||||
|
||||
|
||||
|
@ -56,9 +56,16 @@ $Insert NOTIFICATION_EQUATES
|
||||
Equ COMMA$ to ','
|
||||
|
||||
Declare function Database_Services, Supplement_Services, Rti_Createguid, SRP_Array, Datetime, Signature_Services
|
||||
Declare function Environment_Services, Logging_Services, Select_Into
|
||||
Declare function Environment_Services, Logging_Services, Select_Into, GetTickCount
|
||||
Declare subroutine Database_Services, Rds_Services, Supplement_Services, Logging_Services, Set_Status, SRP_Stopwatch
|
||||
Declare subroutine Btree.Extract, obj_Notes
|
||||
Declare subroutine Btree.Extract, obj_Notes, Mona_Services
|
||||
|
||||
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
|
||||
Error_Services('Add', Service : ' is not a valid service request within the ' : ServiceModule : ' module.')
|
||||
@ -408,6 +415,8 @@ end service
|
||||
//
|
||||
//----------------------------------------------------------------------------------------------------------------------
|
||||
Service AcknowledgeSupplement(SupplID, EntryUser)
|
||||
StartTick = GetTickCount()
|
||||
MetricName = 'AcknowledgeSupplement'
|
||||
|
||||
If ( (SupplID NE '') and (EntryUser NE '') ) then
|
||||
OldRec = Xlate('SUPPLEMENTS', SupplID, '', 'X', '')
|
||||
@ -433,6 +442,8 @@ Service AcknowledgeSupplement(SupplID, EntryUser)
|
||||
Error_Services('Add', 'SupplID or EntryUser was missing in the ' : Service : ' service.')
|
||||
end
|
||||
|
||||
EndTick = GetTickCount()
|
||||
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
|
||||
end service
|
||||
|
||||
|
||||
@ -447,6 +458,8 @@ end service
|
||||
//
|
||||
//----------------------------------------------------------------------------------------------------------------------
|
||||
Service UnacknowledgedSupplementCheck(LotType=LOTTYPES, LotID, Stage=STAGES)
|
||||
StartTick = GetTickCount()
|
||||
MetricName = 'UnacknowledgedSupplementCheck'
|
||||
|
||||
UnackList = ''
|
||||
Response = False$
|
||||
@ -482,6 +495,8 @@ Service UnacknowledgedSupplementCheck(LotType=LOTTYPES, LotID, Stage=STAGES)
|
||||
|
||||
If UnackList NE '' then Response = UnackList
|
||||
|
||||
EndTick = GetTickCount()
|
||||
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
|
||||
end service
|
||||
|
||||
|
||||
@ -496,6 +511,8 @@ end service
|
||||
//
|
||||
//----------------------------------------------------------------------------------------------------------------------
|
||||
Service LogSupplementChange(SupplementRec, EditEvent, EntryUser)
|
||||
StartTick = GetTickCount()
|
||||
MetricName = 'LogSupplementChange'
|
||||
|
||||
If ( (SupplementRec NE '') and (EditEvent NE '') and (EntryUser NE '') ) then
|
||||
SupplementText = SupplementRec<SUPPLEMENTS_SUPPL_TEXT$>
|
||||
@ -513,6 +530,8 @@ Service LogSupplementChange(SupplementRec, EditEvent, EntryUser)
|
||||
Error_Services('Add', 'LotType, LotID, or Stage was missing in the ' : Service : ' service.')
|
||||
end
|
||||
|
||||
EndTick = GetTickCount()
|
||||
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
|
||||
end service
|
||||
|
||||
|
||||
@ -613,3 +632,4 @@ Service SendNotifications(RDSList, EditEvent, Instructions, EntryUser)
|
||||
|
||||
end service
|
||||
|
||||
|
||||
|
@ -10,9 +10,10 @@ $Insert TEST_RUN_OBJ_EQUATES
|
||||
$Insert LOT_EQUATES
|
||||
$Insert LOT_OPERATION_EQUATES
|
||||
|
||||
Declare function Nextkey, Error_Services, Environment_Services, OConv, Logging_Services, SRP_Hashtable, Lot_Services
|
||||
Declare function Nextkey, Error_Services, Environment_Services, OConv, Logging_Services, SRP_Hashtable, Lot_Services, GetTickCount
|
||||
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 Mona_Services
|
||||
|
||||
LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\TEST_RUN_SERVICES\TestWaferProduct'
|
||||
LogDate = Oconv(Date(), 'D4/')
|
||||
@ -30,6 +31,13 @@ objLogTR = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, Comma$, He
|
||||
|
||||
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
|
||||
|
||||
Return Response or ""
|
||||
@ -280,6 +288,9 @@ Service UpdateTWProdSortOrder(TWProdKey, NewOrder)
|
||||
end service
|
||||
|
||||
Service GetAllTestRunTypes()
|
||||
StartTick = GetTickCount()
|
||||
MetricName = 'GetAllTestRunTypes'
|
||||
|
||||
keylist = ''
|
||||
rtList = ''
|
||||
RList('SELECT TEST_RUN_TYPE BY RUN_TYPE', 5, '', '', '')
|
||||
@ -297,6 +308,9 @@ Service GetAllTestRunTypes()
|
||||
end
|
||||
Next ProdKey
|
||||
Response = rtList
|
||||
|
||||
EndTick = GetTickCount()
|
||||
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
|
||||
end service
|
||||
|
||||
Service GetTestWaferLots(ShowOnlyOpenLots)
|
||||
@ -318,6 +332,9 @@ Service GetTestWaferLots(ShowOnlyOpenLots)
|
||||
end service
|
||||
|
||||
Service CreateTestRunRecord(RunTypeID, EqpType, EqpID, PSNo, RDSNo, UserID, TWLotIds, TWLotQtys)
|
||||
StartTick = GetTickCount()
|
||||
MetricName = 'CreateTestRunRecord'
|
||||
|
||||
TWRunKey = ''
|
||||
Response = ''
|
||||
ErrorMessage = ''
|
||||
@ -490,9 +507,15 @@ Service CreateTestRunRecord(RunTypeID, EqpType, EqpID, PSNo, RDSNo, UserID, TWLo
|
||||
Error_Services('Add', ErrorMessage)
|
||||
Response = ''
|
||||
end
|
||||
|
||||
EndTick = GetTickCount()
|
||||
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
|
||||
end service
|
||||
|
||||
Service CreateTestRunWaferRecord(TestRunID, TWPartID, TWUsageTypeID, SourceLotId, Username)
|
||||
StartTick = GetTickCount()
|
||||
MetricName = 'CreateTestRunWaferRecord'
|
||||
|
||||
ErrorMessage = ''
|
||||
If TestRunID NE '' AND TWPartID NE '' then
|
||||
If RowExists('TEST_RUN', TestRunID) then
|
||||
@ -537,6 +560,9 @@ Service CreateTestRunWaferRecord(TestRunID, TWPartID, TWUsageTypeID, SourceLotId
|
||||
Logging_Services('AppendLog', objLogTR, LogData, @FM, @VM)
|
||||
Error_Services('Add', 'Error creating new test run record: ' : ErrorMessage)
|
||||
end
|
||||
|
||||
EndTick = GetTickCount()
|
||||
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
|
||||
end service
|
||||
|
||||
Service UseTWFromLot(LotId, UsageQty, Username)
|
||||
@ -706,6 +732,9 @@ Service GetTestRunKeysByPSN(PSNo)
|
||||
end service
|
||||
|
||||
Service GetTestRunKeysByRDS(RDSNo)
|
||||
StartTick = GetTickCount()
|
||||
MetricName = 'GetTestRunKeysByRDS'
|
||||
|
||||
table = "TEST_RUN"
|
||||
Open "DICT ":table To @DICT Else
|
||||
Error_Services('Add', 'Error opening TEST_RUN dictionary')
|
||||
@ -718,6 +747,9 @@ Service GetTestRunKeysByRDS(RDSNo)
|
||||
Btree.Extract(srch_strng, table, @DICT, keylist, option, flag)
|
||||
Response = keylist
|
||||
end
|
||||
|
||||
EndTick = GetTickCount()
|
||||
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
|
||||
end service
|
||||
|
||||
Service GetTestRunWaferByID(TRWaferID)
|
||||
@ -799,3 +831,4 @@ end service
|
||||
|
||||
|
||||
|
||||
|
||||
|
309
LSL2/STPROC/WAFERCOUNTER_API.txt
Normal file
309
LSL2/STPROC/WAFERCOUNTER_API.txt
Normal file
@ -0,0 +1,309 @@
|
||||
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
|
@ -32,6 +32,8 @@ $Insert WO_LOG_EQUATES
|
||||
$Insert WM_OUT_EQUATES
|
||||
$Insert RLIST_EQUATES
|
||||
$Insert WAFER_COUNTER_EQUATES
|
||||
$Insert TOOL_EQUATES
|
||||
$Insert TOOL_LOG_EQUATES
|
||||
|
||||
Equ Tab$ to \09\
|
||||
Equ CRLF$ to \0D0A\
|
||||
@ -43,8 +45,9 @@ Equ next_cur$ To 1
|
||||
Equ add_exist$ to 2
|
||||
|
||||
Declare subroutine Error_Services, Database_Services, Logging_Services, Httpclient_Services, Reduce, SRP_JSON
|
||||
Declare function Database_Services, Environment_Services, Logging_Services, Httpclient_Services
|
||||
Declare function RTI_CreateGuid, SRP_JSON
|
||||
Declare subroutine Wafer_Counter_Services, Lot_Event_Services
|
||||
Declare function Database_Services, Environment_Services, Logging_Services, Httpclient_Services, OConv
|
||||
Declare function RTI_CreateGuid, SRP_JSON, WO_Mat_Services, WM_Out_Services, Wafer_Counter_Services, Datetime
|
||||
|
||||
LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\WaferCounter'
|
||||
LogDate = Oconv(Date(), 'D4/')
|
||||
@ -263,6 +266,8 @@ Service AddScan(LotID, ScanQty, ScanDtm, ScanTool, ScanUser, ScanLocation, Wafer
|
||||
Record<WAFER_COUNTER.SCAN_WAFER_MAP$> = WaferMap
|
||||
Database_Services('WriteDataRow', 'WAFER_COUNTER', KeyID, Record)
|
||||
|
||||
Response = KeyId
|
||||
|
||||
end service
|
||||
|
||||
|
||||
@ -393,6 +398,161 @@ Service GetWaferCounterToolID(WaferSize=WAFER_SIZES, Location=LOCATIONS)
|
||||
|
||||
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
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
@ -405,3 +565,4 @@ ClearCursors:
|
||||
|
||||
return
|
||||
|
||||
|
||||
|
@ -1231,19 +1231,23 @@ Service SignVoidNonEpp(WOMatKey, Username)
|
||||
Service_Services('PostProcedure', 'RDS_SERVICES', 'DetachRDSFromWO':@vm:RDSNo)
|
||||
If Error_Services('NoError') then
|
||||
LotEventParams = ''
|
||||
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,1> = 'CreateLotEvent' ; //Service Module
|
||||
LotEventParams<1,2> = ''; //Legacy Lot Id, set below
|
||||
LotEventParams<1,3> = DateTime(); //Datetime
|
||||
LotEventParams<1,4> = 'VOID'; //Event Type
|
||||
LotEventParams<1,5> = 'Lot voided by ' : Username; //Event Note
|
||||
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
|
||||
LotEventParams<1,2> = RDSNo
|
||||
LotEventParams<1,3> = 'RDS'
|
||||
Service_Services('PostProcedure', 'LOT_SERVICES', LotEventParams)
|
||||
LotEventParams<1,9> = 'RDS'; //Legacy Lot Type
|
||||
Service_Services('PostProcedure', 'LOT_EVENT_SERVICES', LotEventParams)
|
||||
end else
|
||||
LotEventParams<1,2> = WoMatKey
|
||||
LotEventParams<1,3> = 'WO_MAT'
|
||||
Service_Services('PostProcedure', 'LOT_SERVICES', LotEventParams)
|
||||
LotEventParams<1,9> = 'WO_MAT'
|
||||
Service_Services('PostProcedure', 'LOT_EVENT_SERVICES', LotEventParams)
|
||||
end
|
||||
If Error_Services('NoError') then
|
||||
//Add inventory transaction
|
||||
@ -1311,13 +1315,15 @@ Service SignVoidWMI(WMInKey, Username)
|
||||
If Error_Services('NoError') then
|
||||
LotEventParams = ''
|
||||
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,3> = 'WM_IN'
|
||||
Service_Services('PostProcedure', 'LOT_SERVICES', LotEventParams)
|
||||
LotEventParams<1,3> = DateTime()
|
||||
LotEventParams<1,4> = 'VOID'
|
||||
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
|
||||
//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
|
||||
@ -1386,13 +1392,15 @@ Service SignVoidWMO(WMOutKey, Username)
|
||||
If Error_Services('NoError') then
|
||||
LotEventParams = ''
|
||||
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,3> = 'WM_OUT'
|
||||
Service_Services('PostProcedure', 'LOT_SERVICES', LotEventParams)
|
||||
LotEventParams<1,3> = DateTime()
|
||||
LotEventParams<1,4> = 'VOID'
|
||||
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
|
||||
//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
|
||||
@ -1558,3 +1566,4 @@ ClearCursors:
|
||||
return
|
||||
|
||||
|
||||
|
||||
|
@ -181,14 +181,7 @@ DoRead:
|
||||
|
||||
Reactor = get_property( @window, '@Reactor' )
|
||||
LoadedRDS = Xlate('REACT_STATUS', Reactor, 'LOAD_RDS', 'X')
|
||||
LoadedRuns = ''
|
||||
If LoadedRDS NE '' then
|
||||
For each RDS in LoadedRDS using @VM setting vPos
|
||||
Locate RDS in AllRDS using @VM setting rPos then
|
||||
LoadedRuns<0, -1> = rPos
|
||||
end
|
||||
Next RDS
|
||||
end
|
||||
LoadedRuns = Xlate('RDS', LoadedRDS, 'RUN_ORDER_NUM', 'X')
|
||||
|
||||
LoadedData = ''
|
||||
For each RDSNo in LoadedRDS using @VM setting vPos
|
||||
@ -507,5 +500,3 @@ REACT_MODE:
|
||||
END
|
||||
RETURN
|
||||
|
||||
|
||||
|
||||
|
@ -574,14 +574,15 @@ return
|
||||
|
||||
WRITE_RECORD:
|
||||
|
||||
WONo = Field(Name, '*', 1)
|
||||
CassNo = Field(Name, '*', 2)
|
||||
WOMatKeyID = Name
|
||||
WONo = Field(Name, '*', 1)
|
||||
CassNo = Field(Name, '*', 2)
|
||||
WOMatKeyID = Name
|
||||
|
||||
If {REACTOR_TYPE} NE 'EPP' then
|
||||
If {MAKEUP_BOX} then
|
||||
CurrWaferCount = obj_WO_Mat('CurrWaferCnt', WOMatKeyID)
|
||||
If CurrWaferCount GT 0 then
|
||||
CurrWaferCount = obj_WO_Mat('CurrWaferCnt', WOMatKeyID)
|
||||
CurrStatus = {CURR_STATUS}
|
||||
If ( (CurrWaferCount GT 0) and (CurrStatus NE 'VOID') ) then
|
||||
// Populate MAKEUP_WAFERS table
|
||||
// Add/update cassette data to the MAKEUP_WAFERS table
|
||||
If RowExists('MAKEUP_WAFERS', WOMatKeyID) then
|
||||
@ -600,7 +601,7 @@ WRITE_RECORD:
|
||||
MUWfrRec<MAKEUP_WAFERS.PROD_VER_NO$> = {PROD_VER_NO}
|
||||
MUWfrRec<MAKEUP_WAFERS.CUST_PART_NO$> = {CUST_PART_NO}
|
||||
MUWfrRec<MAKEUP_WAFERS.REACT_TYPE$> = {REACTOR_TYPE}
|
||||
MUWfrRec<MAKEUP_WAFERS.CURR_STATUS_STATIC$> = {CURR_STATUS}
|
||||
MUWfrRec<MAKEUP_WAFERS.CURR_STATUS_STATIC$> = CurrStatus
|
||||
MUWfrRec<MAKEUP_WAFERS.WFR_QTY$> = CurrWaferCount
|
||||
DateOut = Xlate('RDS', {RDS_NO}, 'DATE_OUT', 'X')
|
||||
TimeOut = Xlate('RDS', {RDS_NO}, 'TIME_OUT', 'X') / 86400
|
||||
|
@ -2,9 +2,9 @@ Compile function WO_MAT_Services(@Service, @Params)
|
||||
#pragma precomp SRP_PreCompiler
|
||||
|
||||
Declare function Database_Services, Error_Services, SRP_Json, SRP_Com, Environment_Services, Logging_Services
|
||||
Declare function Datetime
|
||||
Declare function Datetime, GetTickCount
|
||||
Declare subroutine Error_Services, SRP_Json, SRP_Com, Wo_Mat_Services, Database_Services, Logging_Services
|
||||
Declare subroutine obj_wo_mat_log, Set_Status
|
||||
Declare subroutine obj_wo_mat_log, Set_Status, Mona_Services
|
||||
|
||||
$insert LOGICAL
|
||||
$Insert APP_INSERTS
|
||||
@ -20,6 +20,13 @@ Headers = 'Logging DTM' : @FM : 'WOMatKey' : @FM : 'Missing Signature' : @FM :
|
||||
objSyncLog = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, ',', Headers, '', False$, False$)
|
||||
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
|
||||
Error_Services('Set', Service : ' is not a valid service request within the ' : ServiceModule : ' services module.')
|
||||
end
|
||||
@ -379,6 +386,9 @@ Service SyncWOMatInvActionsAndSigProfile(WOMatKey)
|
||||
end service
|
||||
|
||||
Service CassetteIsLastInWo(WoMatKey)
|
||||
StartTick = GetTickCount()
|
||||
MetricName = 'CassetteIsLastInWo'
|
||||
|
||||
IsLastInWo = False$
|
||||
|
||||
If Unassigned(WoMatKey) or WoMatKey EQ '' or RowExists('WO_MAT', WoMatKey) NE True$ then
|
||||
@ -424,6 +434,9 @@ Service CassetteIsLastInWo(WoMatKey)
|
||||
end
|
||||
|
||||
Response = IsLastInWo
|
||||
|
||||
EndTick = GetTickCount()
|
||||
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
|
||||
end service
|
||||
|
||||
Service SetWoMatVoidFlag(WoMatKey, Username)
|
||||
@ -473,3 +486,4 @@ Service SetWoMatVoidFlag(WoMatKey, Username)
|
||||
end service
|
||||
|
||||
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
compile insert NICA_CHECKLISTS_EQUATES
|
||||
/*----------------------------------------
|
||||
Author : Table Create Insert Routine
|
||||
Written : 05/03/2025
|
||||
Written : 03/06/2025
|
||||
Description : Insert for Table NICA_CHECKLISTS
|
||||
----------------------------------------*/
|
||||
#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.REACTOR_TYPES$ to 5
|
||||
equ NICA_CHECKLISTS.REMOVE_IF_COMPLETE$ to 6
|
||||
equ NICA_CHECKLISTS.REMOVE_IF_INTRUSIVE$ to 7
|
||||
|
||||
#endif
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
compile insert NICA_ORDERS_EQUATES
|
||||
/*----------------------------------------
|
||||
Author : Table Create Insert Routine
|
||||
Written : 05/12/2024
|
||||
Written : 28/05/2025
|
||||
Description : Insert for Table NICA_ORDERS
|
||||
----------------------------------------*/
|
||||
#ifndef __NICA_ORDERS_EQUATES__
|
||||
@ -16,9 +16,8 @@ compile insert NICA_ORDERS_EQUATES
|
||||
equ NICA_ORDERS.ORDER_CHECKLIST_IDS$ to 7
|
||||
equ NICA_ORDERS.ORDER_FLOW_IDS$ to 8
|
||||
equ NICA_ORDERS.ORDER_RESPONSE_LEVEL$ to 9
|
||||
equ NICA_ORDERS.CREATED_DTM$ to 10
|
||||
equ NICA_ORDERS.CLOSED_DTM$ to 11
|
||||
equ NICA_ORDERS.CREATED_DTM$ to 10
|
||||
equ NICA_ORDERS.CLOSED_DTM$ to 11
|
||||
equ NICA_ORDERS.INTRUSIVE$ to 12
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
@ -12,6 +12,8 @@ compile insert PROC_QUEUE_EQUATES
|
||||
equ PROC_QUEUE.LAST_ATTEMPT_DTM$ to 3
|
||||
equ PROC_QUEUE.ERROR$ to 4
|
||||
equ PROC_QUEUE.ENTRY_DTM$ to 5
|
||||
equ PROC_QUEUE.NUM_ATTEMPTS$ to 6
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
17
LSL2/STPROCINS/PROC_QUEUE_FAILED_EQUATES.txt
Normal file
17
LSL2/STPROCINS/PROC_QUEUE_FAILED_EQUATES.txt
Normal file
@ -0,0 +1,17 @@
|
||||
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
|
@ -179,3 +179,4 @@ Equ PROD_SPEC_ANKO_MET_POCKETS$ To 166
|
||||
Equ PROD_SPEC_ANKO_FULL_CHAR_POCKET$ To 167
|
||||
Equ PROD_SPEC_ANKO_WAFER_SELECTION$ To 168
|
||||
Equ PROD_SPEC_LOCKED_BY$ To 169
|
||||
Equ PROD_SPEC_SHOW_SPEC_INST_ON_MU_ADD$ To 170
|
||||
|
@ -83,4 +83,5 @@ Equ REACTOR_HGCV_CHECKLIST_ACTIVE$ To 71
|
||||
Equ REACTOR_INTRUSIVE_MAINT_CHECKLIST_ACTIVE$ To 72
|
||||
Equ REACTOR_ABORT_ALARM_CHECKLIST_ACTIVE$ To 73
|
||||
Equ REACTOR_ABORT_ALARM_COMPLETE$ To 74
|
||||
Equ REACTOR_EXHAUST_CHAMBER_THK$ To 75
|
||||
|
||||
|
@ -6,25 +6,27 @@ compile insert REACT_ITEM_EQUATES
|
||||
----------------------------------------*/
|
||||
|
||||
|
||||
Equ REACT_ITEM_RI_NO$ To 0
|
||||
Equ REACT_ITEM_DESC$ To 1
|
||||
Equ REACT_ITEM_ENTER_BY$ To 2
|
||||
Equ REACT_ITEM_ENTER_DTM$ To 3
|
||||
Equ REACT_ITEM_RETIRE_BY$ To 4
|
||||
Equ REACT_ITEM_RETIRE_DT$ To 5
|
||||
Equ REACT_ITEM_PART_TYPE$ To 6
|
||||
Equ REACT_ITEM_MFR_CD$ To 7
|
||||
Equ REACT_ITEM_MFR_PART_NO$ To 8
|
||||
Equ REACT_ITEM_MFR_PART_NO_REV$ To 9
|
||||
Equ REACT_ITEM_SERIAL_NO$ To 10
|
||||
Equ REACT_ITEM_RI_TYPE$ To 11
|
||||
Equ REACT_ITEM_SUSC_SIZE$ To 12
|
||||
Equ REACT_ITEM_PKT_QTY$ To 13
|
||||
Equ REACT_ITEM_PKT_SIZE$ To 14
|
||||
Equ REACT_ITEM_NOTES$ To 15
|
||||
Equ REACT_ITEM_PPLUS_RDS_NO$ To 16
|
||||
Equ REACT_ITEM_SERIAL$ To 17
|
||||
Equ REACT_ITEM_TUBE_GRADE$ To 18
|
||||
Equ REACT_ITEM_TUBE_PRESS$ To 19
|
||||
Equ REACT_ITEM_TUBE_STYLE$ To 20
|
||||
Equ REACT_ITEM_NEW_OR_REFURB$ To 21
|
||||
Equ REACT_ITEM_RI_NO$ To 0
|
||||
Equ REACT_ITEM_DESC$ To 1
|
||||
Equ REACT_ITEM_ENTER_BY$ To 2
|
||||
Equ REACT_ITEM_ENTER_DTM$ To 3
|
||||
Equ REACT_ITEM_RETIRE_BY$ To 4
|
||||
Equ REACT_ITEM_RETIRE_DT$ To 5
|
||||
Equ REACT_ITEM_PART_TYPE$ To 6
|
||||
Equ REACT_ITEM_MFR_CD$ To 7
|
||||
Equ REACT_ITEM_MFR_PART_NO$ To 8
|
||||
Equ REACT_ITEM_MFR_PART_NO_REV$ To 9
|
||||
Equ REACT_ITEM_SERIAL_NO$ To 10
|
||||
Equ REACT_ITEM_RI_TYPE$ To 11
|
||||
Equ REACT_ITEM_SUSC_SIZE$ To 12
|
||||
Equ REACT_ITEM_PKT_QTY$ To 13
|
||||
Equ REACT_ITEM_PKT_SIZE$ To 14
|
||||
Equ REACT_ITEM_NOTES$ To 15
|
||||
Equ REACT_ITEM_PPLUS_RDS_NO$ To 16
|
||||
Equ REACT_ITEM_SERIAL$ To 17
|
||||
Equ REACT_ITEM_TUBE_GRADE$ To 18
|
||||
Equ REACT_ITEM_TUBE_PRESS$ To 19
|
||||
Equ REACT_ITEM_TUBE_STYLE$ To 20
|
||||
Equ REACT_ITEM_NEW_OR_REFURB$ To 21
|
||||
Equ REACT_ITEM_CURR_STATUS_STATIC$ To 22
|
||||
|
||||
|
@ -40,6 +40,9 @@ compile insert SCANS_EQUATES
|
||||
equ SCANS.TW_LOT_QTY$ to 31
|
||||
equ SCANS.TEST_RUN_TYPE_ID$ to 32
|
||||
equ SCANS.TEST_RUN_TYPE_NAME$ to 33
|
||||
equ SCANS.IS_AUTHORIZED_TO_OVERRIDE_ROTR$ to 34
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
@ -156,4 +156,5 @@ Equ WO_MAT_LAST_CASSETTE_TEST_WAFER_ACK_REQ$ To 147
|
||||
Equ WO_MAT_LAST_CASSETTE_TEST_WAFER_ACKED$ To 148
|
||||
Equ WO_MAT_HOLD_STAGE$ To 149
|
||||
Equ WO_MAT_HOLD_INTERRUPTED$ To 150
|
||||
Equ WO_MAT_LAST_CASSETTE_TEST_WAFER_RAN$ To 151
|
||||
|
||||
|
Reference in New Issue
Block a user