
Ich stoße auf ein Problem, bei dem ich sehen möchte, wie meine alten Kontrollgrenzen im Verhältnis zu den aktuellen oder neuen festen Kontrollgrenzen für einen Satz Regelkarten aussehen würden. Normalerweise würde ich jedem Diagramm Referenzlinien hinzufügen, aber ich denke, es könnte einen besseren Weg geben, eine (zumindest für mich) längst vergessene Plattformnachricht zu verwenden.
Anfang des Jahres habe ich mit der Idee herumgespielt, wie es aussehen würde, in diesem Fall eine neue Spalteneigenschaft hinzuzufügen Aktions- und Alarmgrenzen B. für Umgebungsüberwachungsdiagramme, und verwenden Sie diese Spalteneigenschaft dann als Referenzlinie in Kontrolldiagrammen.
Als ich im Scripting Index nach etwas ganz anderem suchte, bin ich auf eine Funktion namens „Add Limits“ gestoßen. Soweit ich das beurteilen kann, gab es diese Funktion schon lange, zumindest vor JMP 14, und sie kann verwendet werden, um obere und untere Kontrollgrenzen an eine Kontrollkarte zu senden. Diese Grenzwerte werden als gestrichelte Linien dargestellt und in einer Tabelle neben dem Diagramm aufgeführt. Ich würde dafür eine Menge JSL benötigen, daher ist es schön, ein so äußerst nützliches Dienstprogramm zu entdecken.
Die grundlegende Verwendung von „Limits hinzufügen“ sieht etwa so aus, wobei die letzte Zeile von JSL eine Nachricht an das Diagramm sendet, die die Werte enthält, die als Grenzwerte der gestrichelten Linie verwendet werden sollen:
//Example of adding limits to a control chart
ccb = dt << Control Chart Builder( Variables( Y( :Column 1 ) ), Show Control Panel( 0 ) );
ccb << chart( position( 1 ), Add Limits( {LCL( 20 ), UCL( 30 )} ) );
Natürlich möchte ich „Limits hinzufügen“ dynamisch für jede Spalte verwenden, das erfordert also ein wenig zusätzliche Feinarbeit.
Lassen Sie uns zunächst eine Tabelle erstellen, die als Beispiel dient.Beachten Sie, dass ich beim Einrichten der Tabelle die Formel lösche, die einige Zufallsdaten generiert, mit denen ich direkt nach dem Erstellen der Tabelle arbeiten kann. Dadurch werden die Werte in der Tabelle fixiert.
dt=New Table( "old and new control limits",Add Rows( 50 ),
New Column( "Column 1",Numeric,"Continuous",Format( "Best", 12 ),
Formula( Round( Random Normal( 25, 3 ), 0 ) )));
column(dt, 1)<< Delete Formula;
Der nächste Schritt besteht darin, eine neue Art von Spalteneigenschaft hinzuzufügen, eine benutzerdefinierte Eigenschaft, die in JMP nicht nativ vorhanden ist.Nach dem Ausführen dieser Zeile verfügt die Spalte in der Datentabelle nun über eine Eigenschaft namens Alte Kontrollgrenzen .
Column( dt, 1 ) << set property( "Old Control Limits", {LCL( 20 ), UCL( 30 )} );
Um dann zu überprüfen, ob das Skript funktioniert hat, können Sie einen Blick auf die Werte der Spalteneigenschaft werfen.Die neue Variable, OCL , hat zwei Werte, LCL(20) , Und UCL(30) . Ich kann diese Werte in einem neuen Kontrolldiagramm verwenden:
OCL = Column( dt, 1 ) << Get Property( "Old Control Limits" );Show( OCL[1], OCL[2] );
Die nächsten paar Zeilen sehen vielleicht wirklich seltsam aus, aber sie sind super robust und nutzen die funktionsbasierte Struktur von JSL.
Zuerst definiere ich ein paar leere oder fast leere Argumente und verschachtele sie dann.Durch das Einrichten dieser Ausdrücke kann ich jeden Teil bearbeiten, ohne ihn auszuwerten.ccbe , der Ausdruck des Kontrolldiagramm-Generators ist eine Funktion, Regelkarten-Generator mit zwei Argumenten, Variablen Und Systemsteuerung anzeigen .
Als nächstes möchte ich ein neues Argument namens c hinzufügen Hart() zur Control Chart Builder-Funktion.
- Die neue Variable, ce ist ein Ausdruck mit dem Argument c Hart und Diagramm enthält ein Argument, Position (1) .
- Ich möchte hinzufügen, Grenzen hinzufügen Diagramm Argument, also habe ich eine Variable ae , um auf ein Leerzeichen zu verweisen Grenzen hinzufügen Ausdruck.
- Zuletzt erstelle ich eine leere Liste mit dem Namen le , die die Grenzwerte enthalten wird, die ich erhalten habe Holen Sie sich Eigentum im OCL Variable aus dem vorherigen Schritt.
ccbe = Expr(Control Chart Builder( Variables( Y( :Column 1 ) ), Show Control Panel( 0 ) ));
ce = Expr( chart( position( 1 ) ) );
ae = Expr( add limits() );
le = {};
Dann schichte ich die Teile übereinander, um Folgendes zu erreichen:
- Zuerst nehme ich die Liste der Dinge auf OCL und hineinstecken le .
- Zweitens nehme ich le und hineinstecken ae , gefolgt vom Einfügen ae hinein ce . Im zweiten Fall habe ich eingewickelt ae in einem Namensausdruck() . Dies gibt mir den bewerteten Ausdruck von ae ohne es zu bewerten. Das NameExpr() Methode ist super praktisch.
- Drittens füge ich ein ce in die ccbe , das ist der gesamte Kontrolldiagrammausdruck.
- Ich habe auch eine beigefügt Zeigen nach jedem Schritt, damit Sie im Protokoll sehen können, wie die Funktion erstellt wird.
- Der letzte Schritt besteht darin, ein Diagramm zu erstellen. Indem ich einfach renne ccbe Ganz allein wird die Variable, die den vollständigen Ausdruck enthält, ausgewertet, und ich erhalte ein Kontrolldiagramm mit gestrichelten Linien, die die alten Kontrollgrenzen darstellen, die aus den Spalteneigenschaften stammen
Insert Into( le, OCL );show( le );
Insert Into( ae, le );Show( ae );
Insert Into( ce, Name Expr( ae ) );Show( ce );
Insert Into( ccbe, Name Expr( ce ), 2 );
ccbe;
Ich bin mir ziemlich sicher, dass es mit etwas mehr Aufwand möglich wäre, mit einer Tabelle zu beginnen, die die aktuellen und alten Kontrollgrenzen enthält, die zum Auffüllen aller Spalteneigenschaften für eine ganze Tabelle mit Prozessvariablen verwendet werden könnte.
Das gesamte Skript ist beigefügt.