Come bloccare la visualizzazione della carta di controllo quando i dati vengono aggiornatiCIAO,
Ho uno script che legge un file csv e controlla il grafico. Mi piace automatizzare questo processo in modo che i nuovi dati vengano aggiornati, il grafico di controllo non genera nuovi grafici. Mi piace vedere solo sul grafico con dati aggiornati.
Ecco lo script che ho usato. Apprezzo il vostro aiuto. Grazie
------------------
I nomi predefiniti sono qui ( 1 );
tt = Aprire (
"/Utenti/adatorab/Documenti/JMP/PASS.csv" ,invisibile);
obj = dt <<
Costruttore di carte di controllo (
Variabili( Y( :A ) ),
Grafico (
Posizione( 1 ),
Punti(
Statistica(
"Individuale"
)
),
Limiti(
Sigma(
"Raggio di movimento"
)
)
),
Grafico (
Posizione( 2 ),
Punti(
Statistica(
"Raggio di movimento"
)
),
Limiti(
Sigma(
"Raggio di movimento"
)
)
)
);
ogg << MostraFinestra ( 0 );
nw = Nuova finestra ( "Carta di controllo" );
nw << Aggiungere (( Casella di riepilogo H ( (oggetto << Rapporto ) << Scatola dei cloni )));
Re: Come bloccare la visualizzazione della carta di controllo quando i dati vengono aggiornatiGrazie mille per il vostro aiuto.
Re: Come bloccare la visualizzazione della carta di controllo quando i dati vengono aggiornatiHo copiato il codice della carta di controllo di Bryon nel tuo, ho aggiunto un tempo "min" casuale ed ecco cosa vedo:
//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;Re: Come bloccare la visualizzazione della carta di controllo quando i dati vengono aggiornatisembra che tu abbia un report del generatore di carte di controllo. Le classiche carte di controllo funzionano in modo leggermente diverso. (Più facile)
Re: Come bloccare la visualizzazione della carta di controllo quando i dati vengono aggiornatiGrazie. Ho provato questo e non ottengo alcun errore ma non vedo l'asse x solo venti punti.
Puoi aiutare ulteriormente? Lo apprezzo molto.
//Apri una finestra per mostrare un grafico di controllo e poi aggiorna
//il grafico ogni 15 secondi
//Include un pulsante per aggiornare in anticipo.
I nomi predefiniti sono qui ( 1 );
//Definisci qui le variabili che devono mantenere i loro valori attraverso le successive chiamate di funzione
//Questo include la finestra e la tabella dati
//Apri una finestra per contenere il grafico (nota che questo accade solo una volta)
nw = Nuova finestra ( "Carta di controllo" ,
Casella di riepilogo V (
Scatola dei bottoni ( "Nuovi dati" , AggiornaDati() ),
titolare = Casella di riepilogo H ();
)
);
// Crea una variabile per contenere un riferimento alla tabella dati
tt = . ;
//Una funzione che aggiornerà il grafico
UpdateData = Funzione ({},
//Chiudi la tabella se è già aperta
Tentativo (dt << Chiudi la finestra );
//Apri tabella dati
tt = Aprire ( "$SAMPLE_DATA/Abrasione.jmp" , Privato );
//Crea il grafico di controllo
obj = dt << Costruttore di carte di controllo (
Mostra due grafici di Shewhart( 0 ),
Mostra pannello di controllo( 0 ),
Mostra capacità( 0 ),
Variabili( Y( :Abrasione ) ),
Grafico (
Punti( Statistica( "Individuale" ) ),
Limiti ( Sigma ( Intervallo mobile ) ),
//Avvertenze( Test 1( 1 ) )
Invia a rapporto(
Spedizione(
{ "Misurazione individuale dell'abrasione" },
"1" ,
ScaleBox,
{ min ( nrow ()- 20 ), Massimo ( nrow ()+ 2 ), Inc( 5 ),
Ticchettii minori( 1 )}
)
)
)
);
//Nascondi la finestra del grafico di controllo temporaneo
ogg << MostraFinestra ( 0 );
//Rimuovi il grafico esistente/vecchio dalla finestra (se ce n'è uno)
Tentativo ((titolare << Bambino ) << Eliminare );
//Aspetta un momento per mostrare quando il grafico si aggiorna
Aspettare ( 0.2 );
//Aggiungi il nuovo grafico
titolare << Aggiungere (( Casella di riepilogo H ( (oggetto << Rapporto ) << Scatola dei cloni )) );
//chiude il grafico di controllo temporaneo
ogg << Chiudi la finestra ;
);
// Script per aggiornare, quindi tracciare e quindi richiamare se stesso 15 secondi dopo
quickieScript = Espr (
//Carica il grafico nella finestra (esegui lo script nella funzione)
AggiornaDati();
//Esegui lo stesso script in 15 secondi
Programma ( 15 , quickieScript );
);
// Inizia le cose:
quickieScript;
Re: Come bloccare la visualizzazione della carta di controllo quando i dati vengono aggiornatiQuesto è uno script del grafico di controllo da eseguire su Abrasion.jmp
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 )}
)
)
);
Utilizza la classica piattaforma della carta di controllo
Re: Come bloccare la visualizzazione della carta di controllo quando i dati vengono aggiornatiGrazie per i vostri suggerimenti. Penso che questa fosse la mia seconda domanda. Dove inserisco il tuo script nello script originale (sopra).
Re: Come bloccare la visualizzazione della carta di controllo quando i dati vengono aggiornatiGrazie mille. Questo ha risolto il mio problema.
Re: Come bloccare la visualizzazione della carta di controllo quando i dati vengono aggiornatiIl problema è che vuoi vedere solo i dati più recenti nel grafico di controllo?
Mi sono imbattuto in alcuni scenari in cui i dati vengono aggiornati in una tabella. Ogni volta che prendo una copia della tabella, voglio vedere solo le ultime 50 righe, indipendentemente da quante righe ci sono nella tabella.
Questo è abbastanza facile da configurare. Basta creare un grafico di controllo e regolare l'asse x. Quindi guarda lo script del grafico di controllo e trova la parte che assomiglia allo script qui sotto.
SendToReport(
Dispatch(
{"Individual Measurement of Metric 1"},
"1",
ScaleBox,
{Min( nrows()-50), Max( nrows()+2 ), Inc( 5 ),
Minor Ticks( 0 )}
),
Dove dice Min( e Max(, modifica i valori nello script originale. Sostituisci il numero in min() con righe()-50 e sostituire il numero in max() con righe()+2.
Ora, se fai tutte le cose fantasiose, elimini e aggiungi cose, otterrai un grafico di controllo con i dati più aggiornati.
Re: Come bloccare la visualizzazione della carta di controllo quando i dati vengono aggiornatiOra penso di aver capito.Il problema è che stai aprendo una nuova finestra ogni volta che lo script viene eseguito.All'inizio di ogni aggiornamento vuoi chiudere l'ultima finestra o aggiornare la stessa finestra con un nuovo grafico.Di seguito è riportato un esempio di quest'ultimo.
Scrivo spesso "pseudocodice" nei commenti prima di scrivere qualsiasi codice reale, trovo che aiuti a garantire che il codice faccia effettivamente quello che mi aspetto.Quindi, una volta che l'intero flusso di lavoro ha un senso, inserisco il codice per farlo effettivamente.
//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;Re: Come bloccare la visualizzazione della carta di controllo quando i dati vengono aggiornatiScusa mi sono perso le prime righe. Ecco quello corretto.
------------
i nomi predefiniti sono qui ( 1 );
quickieScript = Espr (
Programma ( 15 , quickieScript );
//Apri i dati di esempio
tt = Aprire ( "$SAMPLE_DATA/Abrasione.jmp" );
//Una funzione che aggiornerà il grafico
UpdateData = funzione ({},
//Crea il grafico di controllo
obj = dt << Costruttore di carte di controllo (
Variabili( Y( :Abrasione ) ),
Grafico (
Posizione( 1 ),
Punti( Statistica( "Individuale" ) ),
Limiti( Sigma( "Raggio di movimento" ) )
),
Grafico (
Posizione( 2 ),
Punti( Statistica( "Raggio di movimento" ) ),
Limiti( Sigma( "Raggio di movimento" ) )
)
);
//Nascondi la finestra del grafico di controllo temporaneo
ogg << MostraFinestra ( 0 );
//Rimuovi il grafico esistente/vecchio dalla finestra (se ce n'è uno)
Tentativo ((titolare << Bambino ) << Eliminare );
//Aggiungi il nuovo grafico
titolare << Aggiungere (( Casella di riepilogo H ( (oggetto << Rapporto ) << Scatola dei cloni )));
//Chiudi il grafico di controllo temporaneo
ogg << Chiudi la finestra ;
);
//Apre una finestra per mostrare il nuovo grafico di controllo e un pulsante per aggiornare il grafico
//Include un pulsante per eseguire lo script sopra.
nw = Nuova finestra ( "Carta di controllo" ,
Casella di riepilogo V (
Scatola dei bottoni ( "Nuovi dati" , AggiornaDati() ),
titolare = Casella di riepilogo H ();
)
);
//Carica il primo grafico nella finestra (esegui lo script nella funzione)
AggiornaDati();
);
quickieScript;
Re: Come bloccare la visualizzazione della carta di controllo quando i dati vengono aggiornatiGrazie. Uso lo scheduler delle finestre per eseguire questo script e mi piace vedere un grafico quando i dati vengono letti dopo (diciamo circa 15 secondi). Ricevo molte "carte di controllo"). Ho provato il tuo esempio e l'ho inserito nell'attività della finestra (anche la funzione Pianifica) e ottengo molti "grafici di controllo" 1, 2, 3, .. C'è comunque che si può ottenere solo in classifica?
Di seguito è quello che uso. Grazie
//Una funzione che aggiornerà il grafico
UpdateData = funzione ({},
//Crea il grafico di controllo
obj = dt << Costruttore di carte di controllo (
Variabili( Y( :Abrasione ) ),
Grafico (
Posizione( 1 ),
Punti( Statistica( "Individuale" ) ),
Limiti( Sigma( "Raggio di movimento" ) )
),
Grafico (
Posizione( 2 ),
Punti( Statistica( "Raggio di movimento" ) ),
Limiti( Sigma( "Raggio di movimento" ) )
)
);
//Nascondi la finestra del grafico di controllo temporaneo
ogg << MostraFinestra ( 0 );
//Rimuovi il grafico esistente/vecchio dalla finestra (se ce n'è uno)
Tentativo ((titolare << Bambino ) << Eliminare );
//Aggiungi il nuovo grafico
titolare << Aggiungere (( Casella di riepilogo H ( (oggetto << Rapporto ) << Scatola dei cloni )));
//Chiudi il grafico di controllo temporaneo
ogg << Chiudi la finestra ;
);
//Apre una finestra per mostrare il nuovo grafico di controllo e un pulsante per aggiornare il grafico
//Include un pulsante per eseguire lo script sopra.
nw = Nuova finestra ( "Carta di controllo" ,
Casella di riepilogo V (
Scatola dei bottoni ( "Nuovi dati" , AggiornaDati() ),
titolare = Casella di riepilogo H ();
)
);
//Carica il primo grafico nella finestra (esegui lo script nella funzione)
AggiornaDati();
);
quickieScript;
Re: Come bloccare la visualizzazione della carta di controllo quando i dati vengono aggiornatiPotrei andare nella direzione sbagliata qui, ma penso che tu voglia sostituire il grafico nella tua finestra quando vengono visualizzati nuovi dati piuttosto che aggiungerne un altro sotto/dopo di esso.Per fare ciò, elimina il vecchio grafico prima di aggiungerne uno nuovo.Ecco un esempio:
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();