Zugriff auf verschiedene Datentabellen in einer benutzerdefinierten geschriebenen FunktionHallo zusammen,
Ich habe zwei oder mehr Datentabellen
//First I define my function:
MyFunction = Function({Table},
For each row(Table,
shift some coordinates;
store some values;
do some other things;
)
);
//Then I would like to run the function on some existing data tables
MyFunction(dt1);
MyFunction(dt2);
MyFunciton(dt3);Ich kann es im Moment nicht zum Laufen bringen. Im Scripting Guide finde ich eine Ausarbeitung mit Name Expr(), die einige Auswirkungen haben kann, aber bisher für mich schwer fassbar ist.
Danke für Ihre Hilfe
Betreff: Zugriff auf verschiedene Datentabellen in einer benutzerdefinierten geschriebenen FunktionHi,
jetzt habe ich es zum laufen bekommen, danke. Unten ist ein einfaches Skript, das eine funktionierende Syntax zeigt, falls jemand anderes hier landet:
Tabfunction = Function({Tablevar},
Tablevar = New Table((Char(Tablevar)),
Add Rows(5),
New Column ("X1", Numeric, Set Values({1,2,3,4,5})),
New Column ("Test", Character)
);
Tablevar; //pass back Tablevar
);
CalcInvalidDies = Function({Tablevar},
For Each Row(Tablevar,
If(:X1>2,:Test="fail",:Test="pass")
)
);
dtinitial = Tabfunction("initial"); //use pointer
dt2 = Tabfunction ("dt2");
CalcInvalidDies(dtinitial);
CalcInvalidDies(dt2);
Betreff: Zugriff auf verschiedene Datentabellen in einer benutzerdefinierten geschriebenen FunktionAußerdem müssen Sie Ihre Tabellenvariable als letzte Referenz in Ihrer Funktion hinzufügen, damit sie als Referenz an die Tabelle zurückgegeben wird.
abfunction = Function( {Table},
Xlist = {};
Ylist = {};
NumDieX = 10;
NumDieY = 10;
x_mm = 10;
y_mm = 20;
SLW = 0.1;
//Define X-List
For( jj = 0, jj <= NumDieY + 2, jj++,
For( ii = 0, ii <= NumDieX + 2, ii++,
Insert Into( Xlist, ii )
)
);
//Define Y-List
For( kk = 0, kk <= NumDieY + 2, kk++,
For( mm = 0, mm <= NumDieX + 2, mm++,
Insert Into( Ylist, kk );
)
);
Table = New Table( Char( Table ),
Add Rows( (NumDieX + 2) * (NumDieY + 2) ),
New Column( "DieX", Set Values( Xlist ) ),
New Column( "DieY", Set Values( Ylist ) ),
New Column( "DieCorXBL" ),
New Column( "DieCorYBL" ),
New Column( "DieCorXTL" ),
New Column( "DieCorYTL" ),
New Column( "DieCorXTR" ),
New Column( "DieCorYTR" ),
New Column( "DieCorXBR" ),
New Column( "DieCorYBR" )
);
For Each Row(
Table,
:DieCorXBL = :DieX * (SLW + x_mm);
:DieCorYBL = :DieY * (SLW + y_mm);
:DieCorXTL = :DieX * (SLW + x_mm);
:DieCorYTL = :DieY * (SLW + y_mm) + y_mm;
:DieCorXTR = :DieX * (SLW + x_mm) + x_mm;
:DieCorYTR = :DieY * (SLW + y_mm) + y_mm;
:DieCorXBR = :DieX * (SLW + x_mm) + x_mm;
:DieCorYBR = :DieY * (SLW + y_mm);
);
Table << New Column( "Invalid Die", numeric, Set each value( 0 ) );
Table;
);Betreff: Zugriff auf verschiedene Datentabellen in einer benutzerdefinierten geschriebenen FunktionHi,
das funktioniert. Immer noch nicht ganz, weil ich die Tab-Funktion in einer separaten Datei habe und Include ("that separate file.jsl") verwende. Aber weiter unten in dieser separaten Datei ist ein Fehler, der etwas bewirkt. Wenn ich alles unterhalb des ersten Teils /*kommentiere*/, funktioniert es. Ich bin mir sicher, dass ich herausfinden werde, was das Problem ist. Vielen Dank!
</CODE></P><P><CODE class=" language-jsl">
</CODE></P><P> </P></LINGO-BODY><LINGO-SUB id="lingo-sub-257065" slang="en-US">Betreff: Zugriff auf verschiedene Datentabellen in einer benutzerdefinierten geschriebenen Funktion</LINGO-SUB><LINGO-BODY id="lingo-body-257065" slang="en-US"><P>Das Problem mit Ihrem Code ist, dass dtinitial und dtoptimizer auf nichts zeigen, wenn Sie Ihre Funktion aufrufen.Daher bekommst du eine Fehlermeldung.Einige Vorschläge:</P>
<P> </P>
<UL>
<LI>Verwenden Sie nicht die Variable Table.Zu nah an einem reservierten Wort.Vielleicht tbl oder tbl_name?</LI>
<LI>Da Ihre Funktion eine Tabelle erstellt, würde ich den Tabellennamen als Argument nehmen und den Tabellenzeiger zurückgeben.</LI>
</UL>
<PRE><CODE class=" language-jsl">dtinitial = Tabfunction("Initial");
dtoptimizer = Tabfunction("Optimizer");
Betreff: Zugriff auf verschiedene Datentabellen in einer benutzerdefinierten geschriebenen FunktionDas funktioniert übrigens:
Dann werden in der Ausgangstabelle die ungültigen Stempel in der entsprechenden Spalte berechnet.
Nur in Kombination mit New Table() scheint es Probleme zu geben.
CalcInvalidDies = Function({Table},
For Each Row(Table,
If(SQRT((:DieCorXBL-100)^2+(:DieCorYBL-100)^2)>(WaferSize/2-EE), :Invalid Die = :Invalid Die +1);
If(SQRT((:DieCorXTL-100)^2+(:DieCorYTL-100)^2)>(WaferSize/2-EE), :Invalid Die = :Invalid Die +1);
If(SQRT((:DieCorXTR-100)^2+(:DieCorYTR-100)^2)>(WaferSize/2-EE), :Invalid Die = :Invalid Die +1);
If(SQRT((:DieCorXBR-100)^2+(:DieCorYBR-100)^2)>(WaferSize/2-EE), :Invalid Die = :Invalid Die +1);
If(:DieCorYBL<FLATEE></FLATEE>Betreff: Zugriff auf verschiedene Datentabellen in einer benutzerdefinierten geschriebenen Funktion
Hallo nochmal,
Das Problem kam über Nacht zurück, ohne den Code zu ändern. Tatsächlich passiert das ziemlich oft, weil einige Variablen irgendwie gespeichert zu sein scheinen und nach dem Neustart der Software gelöscht werden. Unten ist der Code, den ich verwenden möchte.
Mit der benutzerdefinierten Funktion Tabfunction möchte ich eine bestimmte Anzahl von Tabellen erstellen, wie unten gezeigt, genannt dtinitial, dtoptimizer und so weiter.
Wenn ich den folgenden Code ausführe, lautet die Fehlermeldung
"Name nicht aufgelöst: dtinitial im Zugriff oder Auswertung von 'dtinitial', dtinitial/*###*/"
und zeigen Sie auf die vorletzte Zeile.
Anscheinend verwende ich die Funktionsargumente falsch, oder?
Vielen Dank
Tabfunction = Function({Table},
Xlist={};
Ylist={};
NumDieX=10;
NumDieY=10;<BR /> x_mm=10;
y_mm=20;<BR /> SLW = 0.1;<BR />
//Define X-List
For (jj=0, jj <= NumDieY+2, jj++,
For (ii=0, ii <= NumDieX+2, ii++,
InsertInto(Xlist,ii)
);
);
//Define Y-List
For (kk=0, kk <= NumDieY+2, kk++,
For (mm=0, mm <= NumDieX+2, mm++,
InsertInto(Ylist,kk)
);
);
Table = New Table (Char(Table),
Add Rows((NumDieX+2)*(NumDieY+2)),
New Column ("DieX", Set Values (Xlist)),
New Column ("DieY", Set Values (Ylist)),
New Column ("DieCorXBL"), New Column ("DieCorYBL"),
New Column ("DieCorXTL"), New Column ("DieCorYTL"),
New Column ("DieCorXTR"), New Column ("DieCorYTR"),
New Column ("DieCorXBR"), New Column ("DieCorYBR")
);
For each row (Table,
:DieCorXBL=:DieX*(SLW+x_mm);
:DieCorYBL=:DieY*(SLW+y_mm);
:DieCorXTL=:DieX*(SLW+x_mm);
:DieCorYTL=:DieY*(SLW+y_mm)+y_mm;
:DieCorXTR=:DieX*(SLW+x_mm)+x_mm;
:DieCorYTR=:DieY*(SLW+y_mm)+y_mm;
:DieCorXBR=:DieX*(SLW+x_mm)+x_mm;
:DieCorYBR=:DieY*(SLW+y_mm);
);
Table << New Column ("Invalid Die", numeric, Set each value (0));
);
Tabfunction(dtinitial);
Tabfunction(dtoptimizer);
Betreff: Zugriff auf verschiedene Datentabellen in einer benutzerdefinierten geschriebenen FunktionHallo Jim,
Ich weiß, worauf du hinauswillst. Ich habe unter dem Eindruck gearbeitet, dass meine Syntax grundlegend falsch ist, sodass ich nicht zu viele Details preisgeben musste, aber das scheint nicht der Fall zu sein. Es funktioniert genau wie oben beschrieben.
Ich habe drei Stunden damit verbracht, das Problem zu beheben, dann habe ich diese Frage geschrieben. Dann habe ich zwei Stunden damit verbracht, eine Problemumgehung zu implementieren, dann habe ich versucht, den Code auf den ursprünglichen Zustand zurückzusetzen, um eine Fehlermeldung für Sie zu reproduzieren, und jetzt funktioniert alles einwandfrei. Also danke, denke ich 
Betreff: Zugriff auf verschiedene Datentabellen in einer benutzerdefinierten geschriebenen FunktionEs ist ziemlich schwierig, zu versuchen, Ihren Code mit der kryptischen Form zu debuggen, in der er sich befindet.Bekommst du irgendwelche Fehlermeldungen im Log?
For Each Row() kann nur eine Instanz gleichzeitig in Ihrem Skript ausführen.Ich neige dazu, es in Funktionen zu vermeiden.Ich gehe normalerweise auch zu einer vollständigen Spaltenreferenz von
Table:a[15] = 43;
// or
column( Table, "a" )[15] = 43;
um zu vermeiden, dass die Funktion auf die falsche Tabelle zeigt.