Verwendung von JSL in JMP Version. 15.2.0. Der JSL-Code ist in eine angehängte Tabelle mit dem Skriptnamen „Control Charts“ eingebettet.
Ich habe Probleme mit dem Verhalten in verschachtelten Schleifen, wenn ich versuche, Spezifikationsgrenzen (LSL, Ziel, USL) über ein benutzerdefiniertes Grafikskript für eine variable Anzahl von Phasengruppierungen und „Wo“-Bedingungen hinzuzufügen.Meine verschachtelten Schleifen führen derzeit dazu, dass Spezifikationsgrenzen für das letzte Diagramm auf alle erstellten Regelkarten angewendet werden, anstatt dass jede Karte/Phase/Where-Bedingung ihre jeweiligen Grenzen erhält.
Vielen Dank im Voraus für den Anstoß in die richtige Richtung!
Todd
Todd, JMP/JSL ist im Vergleich zu typischeren Programmiersprachen etwas seltsam – insbesondere muss man die gesamte Bereichskontrolle praktisch selbst durchführen.
Ich habe hier ein Beispiel, das veranschaulicht, womit Sie es zu tun haben – man könnte meinen, dass das folgende Skript ein erstellt "Rot" Dann "Blau" Dreieck im Grafikskript, stattdessen werden jedoch nur zwei blaue Dreiecke erstellt.
Names Default To Here( 1 );
Open( "$SAMPLE_DATA/Big Class.jmp" );
biv = Bivariate( Y( :weight ), X( :height ), FitLine );
rbiv = biv << report;
framebox = rbiv[frame box( 1 )];
/**** Make a red triangle??? ****/
color = "Red";
framebox << Add Graphics Script(
Transparency( 0.5 );
Fill Color( color );
Polygon( [60, 72, 57], [75, 120, 120] );
);
/**** Make a blue triangle??? ****/
color = "Blue";
framebox << Add Graphics Script(
Transparency( 0.5 );
Fill Color( color );
Polygon( [60, 72, 57], [85, 130, 130] );
);
Dies liegt daran, wie JSL mit dem Bereich umgeht – wenn Sie den verwenden <<GRAFIKSKRIPT hinzufügen=""> Funktion, dann wird sie als Satz nicht ausgewerteter Anweisungen hinzugefügt (eigentlich handelt es sich um eine nicht ausgewertete).<CODE class=" language-jsl"> Kleber() Funktion). Jede Variable, die innerhalb der existiert <<GRAFIKSKRIPT hinzufügen=""> Das Skript wird ausgewertet<EM> nur während der Ausführung</EM> des Drehbuchs.Wenn das Grafikskript ausgeführt wird (denken Sie daran, dass es an die Datei angehängt ist<CODE class=" language-jsl"> Rahmenbox (das in den Anzeigebaum des Fensters eingebettet ist) muss jede Variable aufgelöst werden.Die Regeln zur Bereichsauflösung schreiben vor, dass dies geprüft wird Lokal Umfang (falls vorhanden), der Hier Bereich (falls vorhanden), dann der Global Bereich – wenn er sie in keinem dieser Bereiche finden kann, wird er durch einen ersetzt Leer() Wert.
Daher werden die Skripte dem hinzugefügt Rahmenbox innerhalb des Hauptskripts, aber erst später ausgeführt.An diesem späteren Punkt ist die Farbvariable "Blau" , also sind beide Dreiecke blau.
Der Weg, dieses Problem zu lösen, besteht darin, alle interessierenden Variablen aufzulösen beim Hinzufügen das Grafikskript, nicht bei der Ausführung.Verwenden Sie dazu die Eval( Eval Expr() ) Methodik, wie hier gezeigt.
Names Default To Here( 1 );
Open( "$SAMPLE_DATA/Big Class.jmp" );
biv = Bivariate( Y( :weight ), X( :height ), FitLine );
rbiv = biv << report;
framebox = rbiv[frame box( 1 )];
/**** Make a red triangle!!! ****/
color = "Red";
Eval( Eval Expr(
framebox << Add Graphics Script(
Transparency( 0.5 );
Fill Color( Expr( color ) );
Polygon( [60, 72, 57], [75, 120, 120] );
);
) );
/**** Make a blue triangle!!! ****/
color = "Blue";
Eval( Eval Expr(
framebox << Add Graphics Script(
Transparency( 0.5 );
Fill Color( Expr( color ) );
Polygon( [60, 72, 57], [85, 130, 130] );
);
) );
Sie müssen diese Methode für alle Ihre Variablen innerhalb verwenden <<GRAFIKSKRIPT hinzufügen=""> Funktion, damit sie den Wert zum Zeitpunkt der halten<CODE class=" language-jsl"> <<GRAFIKSKRIPT hinzufügen=""> hieß.</GRAFIKSKRIPT>