So frieren Sie die Anzeige des Kontrolldiagramms ein, wenn Daten aktualisiert werdenHallo,
Ich habe ein Skript, das eine CSV-Datei liest und ein Kontrolldiagramm erstellt. Ich möchte diesen Prozess automatisieren, damit neue Daten aktualisiert werden und das Kontrolldiagramm keine neuen Diagramme generiert. Ich möchte nur Diagramme mit aktualisierten Daten sehen.
Hier ist das Skript, das ich verwendet habe. Ich schätze Ihre Hilfe. Danke
-------------------
Namen standardmäßig hier ( 1 );
dt = Offen (
„/Users/adatorab/Documents/JMP/PASS.csv“ ,unsichtbar);
obj = dt <<
Regelkarten-Generator (
Variablen( Y( :A ) ),
Diagramm (
Position( 1 ),
Punkte(
Statistik(
"Individuell"
)
),
Grenzen(
Sigma(
„Bewegter Bereich“
)
)
),
Diagramm (
Position( 2 ),
Punkte(
Statistik(
„Bewegter Bereich“
)
),
Grenzen(
Sigma(
„Bewegter Bereich“
)
)
)
);
obj << Schaufenster ( 0 );
nw = Neues Fenster ( „Kontrollkarte“ );
nw << Anhängen (( H-Listenfeld ( (obj << Bericht ) << Klon-Box )));
Betreff: So frieren Sie die Anzeige der Kontrollkarte ein, wenn Daten aktualisiert werdenVielen Dank für deine Hilfe.
Betreff: So frieren Sie die Anzeige der Kontrollkarte ein, wenn Daten aktualisiert werdenIch habe Bryons Kontrolldiagrammcode in Ihren kopiert, eine zufällige „Mindestzeit“ hinzugefügt und Folgendes sehe ich:
//Open a window to show a control chart and then update
//the chart every 15 seconds
//Includes a button to refresh early.
Names Default To Here( 1 );
//Define variables here that need to keep their values through subsequent function calls
//This includes the window and data table
//Open a window to hold the chart (note this only happens once)
nw = New Window( "Control Chart",
V List Box(
Button Box( "New Data", UpdateData() ),
holder = H List Box();
)
);
//Make a variable to hold a reference to the data table
dt = .;
//A function that will update the chart
UpdateData = Function( {},
//Close the table if it is already open
Try( dt << Close Window );
//Open data table
dt = Open( "$SAMPLE_DATA/Abrasion.jmp", Private );
//Make the control chart
obj = dt << Control Chart(
Group Size( 1 ),
KSigma( 3 ),
Chart Col( :Abrasion, Individual Measurement ),
SendToReport(
Dispatch(
{"Individual Measurement of Abrasion"},
"1",
ScaleBox,
{Min( nrows() - Floor( Random Uniform( 10, 25 ) ) ), Max( nrows() + 2 ), Inc( 5 ),
Minor Ticks( 1 )}
)
)
);
//Hide the temporary control chart window
obj << ShowWindow( 0 );
//Remove existing/old graph from the window (if there is one)
Try( (holder << Child) << Delete );
//Add the new graph
holder << Append( (H List Box( (obj << Report) << Clone Box )) );
//Close the temporary control chart
obj << Close Window;
);
//Script to update then chart and then call itself 15 seconds later
quickieScript = Expr(
//Load the chart in the window (run the script in the function)
UpdateData();
//Run this same script in 5 seconds
Schedule( 5, quickieScript );
);
//Start things off:
quickieScript;Betreff: So frieren Sie die Anzeige der Kontrollkarte ein, wenn Daten aktualisiert werdenEs sieht so aus, als hätten Sie einen Bericht zum Erstellen von Kontrolldiagrammen. Die klassischen Regelkarten funktionieren etwas anders. (Einfacher)
Betreff: So frieren Sie die Anzeige der Kontrollkarte ein, wenn Daten aktualisiert werdenDanke. Ich habe es versucht und erhalte keine Fehlermeldung, aber ich sehe auf der X-Achse nicht nur zwanzig Punkte.
Können Sie weiterhelfen? Ich schätze es sehr.
//Öffnen Sie ein Fenster, um ein Kontrolldiagramm anzuzeigen und aktualisieren Sie es dann
//das Diagramm alle 15 Sekunden
//Enthält eine Schaltfläche zum vorzeitigen Aktualisieren.
Namen standardmäßig hier ( 1 );
//Definieren Sie hier Variablen, die ihre Werte über nachfolgende Funktionsaufrufe hinweg behalten müssen
//Dazu gehören das Fenster und die Datentabelle
//Öffnen Sie ein Fenster, um das Diagramm zu speichern (beachten Sie, dass dies nur einmal geschieht)
nw = Neues Fenster ( „Kontrollkarte“ ,
V-Listenfeld (
Button-Box ( "Neue Daten" , Daten aktualisieren() ),
Inhaber = H-Listenfeld ();
)
);
//Eine Variable erstellen, die einen Verweis auf die Datentabelle enthält
dt = . ;
//Eine Funktion, die das Diagramm aktualisiert
UpdateData = Funktion ( {},
//Schließe die Tabelle, wenn sie bereits geöffnet ist
Versuchen ( dt << Fenster schließen );
//Datentabelle öffnen
dt = Offen ( „$SAMPLE_DATA/Abrasion.jmp“ , Privatgelände );
//Erstellen Sie das Kontrolldiagramm
obj = dt << Regelkarten-Generator (
Zwei Shewhart-Diagramme anzeigen( 0 ),
Systemsteuerung anzeigen( 0 ),
Fähigkeit anzeigen( 0 ),
Variablen( Y( :Abrasion ) ),
Diagramm (
Punkte( Statistik( "Individuell" ) ),
Grenzen(Sigma(Gleitender Bereich)),
//Warnungen( Test 1( 1 ) )
SendToReport(
Versenden(
{ „Einzelmessung des Abriebs“ },
„1“ ,
ScaleBox,
{ Mindest ( nrows ()- 20 ), Max ( nrows ()+ 2 ), Inc( 5 ),
Kleinere Zecken( 1 )}
)
)
)
);
//Das temporäre Kontrolldiagrammfenster ausblenden
obj << Schaufenster ( 0 );
//Vorhandenes/altes Diagramm aus dem Fenster entfernen (falls vorhanden)
Versuchen ( (Inhaber << Kind ) << Löschen );
//Warten Sie einen Moment, um anzuzeigen, wann das Diagramm aktualisiert wird
Warten ( 0,2 );
//Das neue Diagramm hinzufügen
Inhaber << Anhängen ( ( ( H-Listenfeld ( (obj << Bericht ) << Klon-Box )) );
//Schließen Sie das temporäre Kontrolldiagramm
obj << Fenster schließen ;
);
//Skript zum Aktualisieren des Diagramms und zum Selbstaufruf 15 Sekunden später
QuickieScript = Ausdruck (
//Laden Sie das Diagramm in das Fenster (führen Sie das Skript in der Funktion aus)
Daten aktualisieren();
//Führen Sie dasselbe Skript in 15 Sekunden aus
Zeitplan ( 15 , QuickieScript );
);
//Dinge beginnen:
QuickieScript;
Betreff: So frieren Sie die Anzeige der Kontrollkarte ein, wenn Daten aktualisiert werdenDies ist ein Kontrolldiagrammskript, das für Abrasion.jmp ausgeführt wird
Control Chart(
Group Size( 1 ),
KSigma( 3 ),
Chart Col( :Abrasion, Individual Measurement ),
SendToReport(
Dispatch(
{"Individual Measurement of Abrasion"},
"1",
ScaleBox,
{Min( nrows()-25 ), Max( nrows()+2 ), Inc( 5 ),
Minor Ticks( 1 )}
)
)
);
Es nutzt die klassische Regelkartenplattform
Betreff: So frieren Sie die Anzeige der Kontrollkarte ein, wenn Daten aktualisiert werdenVielen Dank für Ihre Vorschläge. Ich glaube, das war meine zweite Frage. Wo füge ich Ihr Skript im Originalskript ein (oben)?
Betreff: So frieren Sie die Anzeige der Kontrollkarte ein, wenn Daten aktualisiert werdenVielen Dank. Das hat mein Problem gelöst.
Betreff: So frieren Sie die Anzeige der Kontrollkarte ein, wenn Daten aktualisiert werdenBesteht das Problem darin, dass Sie nur die neuesten Daten im Kontrolldiagramm sehen möchten?
Ich bin auf einige Szenarien gestoßen, in denen die Daten in einer Tabelle aktualisiert werden. Jedes Mal, wenn ich eine Kopie der Tabelle erhalte, möchte ich nur die letzten 50 Zeilen sehen, unabhängig davon, wie viele Zeilen die Tabelle enthält.
Das ist ziemlich einfach einzurichten. Erstellen Sie einfach ein Kontrolldiagramm und passen Sie die x-Achse an. Schauen Sie sich dann das Kontrolldiagramm-Skript an und finden Sie den Teil, der wie das folgende Skript aussieht.
SendToReport(
Dispatch(
{"Individual Measurement of Metric 1"},
"1",
ScaleBox,
{Min( nrows()-50), Max( nrows()+2 ), Inc( 5 ),
Minor Ticks( 0 )}
),
Wo Min( und Max( steht, bearbeiten Sie die Werte im Originalskript. Ersetzen Sie die Zahl in min() durch nrows()-50 und ersetze die Zahl in max() durch nrows()+2.
Wenn Sie nun alle notwendigen Schritte ausführen, Dinge löschen und anhängen, erhalten Sie ein Kontrolldiagramm mit den aktuellsten Daten.
Betreff: So frieren Sie die Anzeige der Kontrollkarte ein, wenn Daten aktualisiert werdenJetzt denke ich, dass ich es verstehe.Das Problem besteht darin, dass Sie jedes Mal, wenn das Skript ausgeführt wird, ein neues Fenster öffnen.Zu Beginn jeder Aktualisierung möchten Sie entweder das letzte Fenster schließen oder dasselbe Fenster mit einem neuen Diagramm aktualisieren.Nachfolgend finden Sie ein Beispiel für Letzteres.
Ich schreibe oft „Pseudocode“ in Kommentare, bevor ich echten Code schreibe. Ich finde, das hilft dabei, sicherzustellen, dass der Code tatsächlich das tut, was ich von ihm erwarte.Sobald der gesamte Arbeitsablauf dann einen Sinn ergibt, füge ich den Code ein, um ihn tatsächlich auszuführen.
//Open a window
//Every 15 Seconds:
//Make a chart with the latest data
//Update the window with a new chart
//Open a window to show a control chart and then update
//the chart every 15 seconds
//Includes a button to refresh early.
Names Default To Here( 1 );
//Define variables here that need to keep their values through subsequent function calls
//This includes the window and data table
//Open a window to hold the chart (note this only happens once)
nw = New Window( "Control Chart",
V List Box(
Button Box( "New Data", UpdateData() ),
holder = H List Box();
)
);
//Make a variable to hold a reference to the data table
dt = .;
//A function that will update the chart
UpdateData = Function( {},
//Close the table if it is already open
Try( dt << Close Window );
//Open data table
dt = Open( "$SAMPLE_DATA/Abrasion.jmp", Private );
//Make the control chart
obj = dt << Control Chart Builder(
Variables( Y( :Abrasion ) ),
Chart(
Position( 1 ),
Points( Statistic( "Individual" ) ),
Limits( Sigma( "Moving Range" ) )
),
Chart(
Position( 2 ),
Points( Statistic( "Moving Range" ) ),
Limits( Sigma( "Moving Range" ) )
)
);
//Hide the temporary control chart window
obj << ShowWindow( 0 );
//Remove existing/old graph from the window (if there is one)
Try( (holder << Child) << Delete );
//Wait a moment to show when the chart updates
Wait(0.2);
//Add the new graph
holder << Append( (H List Box( (obj << Report) << Clone Box )) );
//Close the temporary control chart
obj << Close Window;
);
//Script to update then chart and then call itself 15 seconds later
quickieScript = Expr(
//Load the chart in the window (run the script in the function)
UpdateData();
//Run this same script in 15 seconds
Schedule( 15, quickieScript );
);
//Start things off:
quickieScript;Betreff: So frieren Sie die Anzeige der Kontrollkarte ein, wenn Daten aktualisiert werdenTut mir leid, dass ich die ersten paar Zeilen verpasst habe. Hier ist das Richtige.
------------
Namen werden standardmäßig hier angezeigt ( 1 );
QuickieScript = Ausdruck (
Zeitplan ( 15 , QuickieScript );
//Beispieldaten öffnen
dt = Offen ( „$SAMPLE_DATA/Abrasion.jmp“ );
//Eine Funktion, die das Diagramm aktualisiert
UpdateData = Funktion ( {},
//Erstellen Sie das Kontrolldiagramm
obj = dt << Regelkarten-Generator (
Variablen( Y( :Abrasion ) ),
Diagramm (
Position( 1 ),
Punkte( Statistik( "Individuell" ) ),
Grenzen( Sigma( „Bewegter Bereich“ ) )
),
Diagramm (
Position( 2 ),
Punkte( Statistik( „Bewegter Bereich“ ) ),
Grenzen( Sigma( „Bewegter Bereich“ ) )
)
);
//Das temporäre Kontrolldiagrammfenster ausblenden
obj << Schaufenster ( 0 );
//Vorhandenes/altes Diagramm aus dem Fenster entfernen (falls vorhanden)
Versuchen ( (Inhaber << Kind ) << Löschen );
//Das neue Diagramm hinzufügen
Inhaber << Anhängen (( H-Listenfeld ( (obj << Bericht ) << Klon-Box )));
//Schließen Sie das temporäre Kontrolldiagramm
obj << Fenster schließen ;
);
//Öffnen Sie ein Fenster, um das neue Kontrolldiagramm und eine Schaltfläche zum Aktualisieren des Diagramms anzuzeigen
//Enthält eine Schaltfläche zum Ausführen des obigen Skripts.
nw = Neues Fenster ( „Kontrollkarte“ ,
V-Listenfeld (
Button-Box ( "Neue Daten" , Daten aktualisieren() ),
Inhaber = H-Listenfeld ();
)
);
//Das erste Diagramm im Fenster laden (das Skript in der Funktion ausführen)
Daten aktualisieren();
);
QuickieScript;
Betreff: So frieren Sie die Anzeige der Kontrollkarte ein, wenn Daten aktualisiert werdenDanke. Ich verwende den Fensterplaner, um dieses Skript auszuführen, und möchte ein Diagramm sehen, wenn die Daten danach gelesen werden (z. B. nach etwa 15 Sekunden). Ich bekomme viele „Kontrollkarten“). Ich habe Ihr Beispiel ausprobiert und ihm die Fensteraufgabe (auch Zeitplanfunktion) zugewiesen, und ich erhalte viele „Kontrolldiagramme“ 1, 2, 3, ... Gibt es überhaupt einen, den man nur auf der Karte bekommen kann?
Unten ist, was ich verwende. Danke
//Eine Funktion, die das Diagramm aktualisiert
UpdateData = Funktion ( {},
//Erstellen Sie das Kontrolldiagramm
obj = dt << Regelkarten-Generator (
Variablen( Y( :Abrasion ) ),
Diagramm (
Position( 1 ),
Punkte( Statistik( "Individuell" ) ),
Grenzen( Sigma( „Bewegter Bereich“ ) )
),
Diagramm (
Position( 2 ),
Punkte( Statistik( „Bewegter Bereich“ ) ),
Grenzen( Sigma( „Bewegter Bereich“ ) )
)
);
//Das temporäre Kontrolldiagrammfenster ausblenden
obj << Schaufenster ( 0 );
//Vorhandenes/altes Diagramm aus dem Fenster entfernen (falls vorhanden)
Versuchen ( (Inhaber << Kind ) << Löschen );
//Das neue Diagramm hinzufügen
Inhaber << Anhängen (( H-Listenfeld ( (obj << Bericht ) << Klon-Box )));
//Schließen Sie das temporäre Kontrolldiagramm
obj << Fenster schließen ;
);
//Öffnen Sie ein Fenster, um das neue Kontrolldiagramm und eine Schaltfläche zum Aktualisieren des Diagramms anzuzeigen
//Enthält eine Schaltfläche zum Ausführen des obigen Skripts.
nw = Neues Fenster ( „Kontrollkarte“ ,
V-Listenfeld (
Button-Box ( "Neue Daten" , Daten aktualisieren() ),
Inhaber = H-Listenfeld ();
)
);
//Das erste Diagramm im Fenster laden (das Skript in der Funktion ausführen)
Daten aktualisieren();
);
QuickieScript;
Betreff: So frieren Sie die Anzeige der Kontrollkarte ein, wenn Daten aktualisiert werdenIch gehe hier vielleicht in die falsche Richtung, aber ich denke, Sie möchten, dass das Diagramm in Ihrem Fenster ersetzt wird, wenn neue Daten angezeigt werden, anstatt darunter/danach ein weiteres hinzuzufügen.Löschen Sie dazu das alte Diagramm, bevor Sie ein neues anhängen.Hier ist ein Beispiel:
names default to here( 1 );
//Open sample data
dt = Open("$SAMPLE_DATA/Abrasion.jmp");
//A variable used to hide part of the data
lastrow = 10;
//Hide data after the last row (simulates a smaller table)
df = dt << Data Filter(
Location( {696, 15} ),
Mode( Select( 0 ), Show( 1 ), Include( 1 ) ),
Add Filter(
columns( Transform Column( "Row", Formula( Row() ) ) ),
Where(
Transform Column( "Row", Formula( Row() ) ) <= lastrow
)
)
);
//A function that will update the chart
UpdateData = function( {},
//Add one row to the data table
lastrow++;
//Update the data filter (simulates getting more data)
df << Delete All;
df << Add Filter(
columns( Transform Column( "Row", Formula( Row() ) ) ),
Where(
Transform Column( "Row", Formula( Row() ) ) <= lastrow
)
);
//Make the control chart
obj = dt << Control Chart Builder(
Variables( Y( :Abrasion ) ),
Chart(
Position( 1 ),
Points( Statistic( "Individual" ) ),
Limits( Sigma( "Moving Range" ) )
),
Chart(
Position( 2 ),
Points( Statistic( "Moving Range" ) ),
Limits( Sigma( "Moving Range" ) )
)
);
//Hide the temporary control chart window
obj << ShowWindow(0);
//Remove existing/old graph from the window (if there is one)
Try( (holder << Child) << Delete );
//Add the new graph
holder << Append(( H List Box( (obj << Report) << Clone Box)));
//Close the temporary control chart
obj << Close Window;
);
//Open a window to show the new control chart and a button to refresh the chart
//Includes a button to run the script above.
nw = New Window("Control Chart",
V List Box(
Button Box("New Data", UpdateData() ),
holder = H List Box();
)
);
//Load the first chart in the window (run the script in the function)
UpdateData();