Benötigen Sie Hilfe bei JSL für die druckkompensierte Temperaturformel?Hallo,
Ich suche nach einem Beispiel oder einer Anleitung, wie ich mit dem Schreiben von JSL für die folgende druckkompensierte Temperatur beginnen kann:
- Erstellen Sie eine Benutzeroberfläche, um eine Temperaturspalte und eine Druckspalte auszuwählen. Lassen Sie den Benutzer außerdem einen Referenzdruck, einen Umrechnungsfaktor und einen Reinheitsfaktor eingeben.
- Berechnen Sie die druckkompensierte Temperatur für jede Zeile mithilfe mehrerer IF-Anweisungen und mathematischer Ausdrücke unter Verwendung der UI-Daten.
- Erstellen Sie eine neue Spalte und füllen Sie sie mit der oben berechneten druckkompensierten Temperatur aus.
Jede Hilfe ist willkommen!
Qualitäts- und VerfahrenstechnikBetreff: Benötigen Sie Hilfe bei JSL für die druckkompensierte Temperaturformel@txnelson @Craige_Hales
Vielen Dank euch beiden!Das ist genau das, was ich brauchte.Das ist vielleicht nicht optimal, aber am Ende habe ich Zwischenspalten mit Formeln erstellt, um die druckkompensierte Temperatur (pct) abzuleiten.Ich wollte nicht mehrere Zwischenspalten in meiner Datentabelle, also habe ich die Formel aus dem pct entfernt und die Zwischenspalten gelöscht.Wenn ich jemals weitere Datenzeilen hinzufüge, muss ich das Skript erneut ausführen.
Ich habe den Code eingefügt, den ich unten gefunden habe (aber beachten Sie, dass ich alle Konstanten / Koeffizienten ändern musste, da es für meine Arbeit ist)
//Script for creating a pressure compensated temperature tag
//Rev 1 8/25/20
names default to here(1);
/*dtList = New Table("Example Data",
new column("Temperature"),
new column("Pressure")
);*/
dtList = CurrentDataTable();
dlg = Column Dialog(
temperatureCol = ColList( "Temperature", Max Col( 1 ), Modeling Type( {"Continuous", "Multiple Response"} ) ),
pressureCol = ColList( "Pressure", Max Col( 1 ), Modeling Type( {"Continuous", "Multiple Response"} ) ),
Line Up( 2,
Text Box( "Reference Pressure" ), refPressure = EditNumber( . ),
Text Box( "Conversion Factor" ), conFactor = EditNumber( 1 ),
Text Box( "Purity Factor" ), purFactor = EditNumber( 1 ),
Text Box( "Pressure Units"), unitsP = comboBox( {"Gauge","Absolute"}),
Text Box( "PComp Tag Name"), pcompTag = EditText( "PComp Tag" )
),
Text Box("
**Reference Pressure is the base pressure and must be in the same units as the pressure tag.
**Pressure Units is a logical to indicate if the pressure being measured is absolute or gauge. For most
situations, the pressure will be measure in terms of gauge. However, vacuum pipestills typically use absolute.
**PComp Tag Name will be the column name of the new Pressure Compensate Temperature tag.
"),
);
show(dlg);
//Absolute needs to be 0 and Gauge needs to be 1. The combo box has Absolute as 2 and Gauge as 1,
If( dlg["unitsP"] == 1, dlg["unitsP"] = 1, dlg["unitsP"] = 0 );
//Write("unitsP equals: ", dlg["unitsP"]);
Eval( // run the code below
Eval Expr( // convert the Expr(...) below into a hard coded value
// eval(evalexpr(expr(...))) is a pattern for getting values from the dlg INTO
// A FORMULA. if you follow this pattern, the formula will be self contained.
dtList << New Column( "PA",
formula( // random formula that uses all the variables AND shows an if() stmt
Expr( dlg["purFactor"] ) *
(Expr( dlg["unitsP"] ) + Expr( dlg["pressureCol"][1] ) * Expr( dlg["purFactor"] ) / 12)
)
)
)
);
Eval( // run the code below
Eval Expr(
dtList << New Column( "PB",
formula( // random formula that uses all the variables AND shows an if() stmt
Expr( dlg["refPressure"] ) * Expr( dlg["conFactor"] ) / 12 + Expr( dlg["unitsP"] )
)
)
)
);
Eval(
Eval Expr(
dtList << New Column( "TA",
formula( // random formula that uses all the variables AND shows an if() stmt
Expr( dlg["temperatureCol"][1] ) + 400
)
)
)
);
New Column( "AA",
formula(
If( :PA >= 1.1111 ,
(4 - LOG10(:PA)) / (2000 - 25*LOG10(:PA)) - 0.0001
, // else
(3- LOG10(:PA)) / (2000 - 25*LOG10(:PA)) - 0.0001
)
)
);
New Column( "AB",
formula(
If( :PB >= 1.1111 ,
(4 - LOG10(:PB)) / (2000 - 25*LOG10(:PB)) - 0.0001
, // else
(3 - LOG10(:PB)) / (2000 - 100*LOG10(:PB)) - 0.0001
)
)
);
New Column( "DEN",
formula(
:AB / :AA * ((1.1 / :TA) - 0.0001) + 0.0001
)
);
New Column( "TB",
formula(
1.1 / :DEN - 400
)
);
Column("TB") << delete formula;
Column("TB") << Set Name( dlg["pcompTag"] );
dtList << delete columns( {"PA","PB","TA","AA","AB","DEN"} );Betreff: Benötigen Sie Hilfe bei JSL für die druckkompensierte TemperaturformelHi,
Was meinst du mit " Druckkompensierte Temperatur"? Genauere Details wären für den Support einfacher
Betreff: Benötigen Sie Hilfe bei JSL für die druckkompensierte TemperaturformelKühl! Ich bin mir nicht sicher, ob ich jemals den Spaltendialog verwendet habe, aber es scheint perfekt für diesen Job zu sein.
Nachdem Sie Jims Beispiel ausgeführt haben, versuchen Sie Code wie diesen, um Ihrer Tabelle eine Formelspalte hinzuzufügen.
Eval( // run the code below
Eval Expr( // convert the Expr(...) below into a hard coded value
// eval(evalexpr(expr(...))) is a pattern for getting values from the dlg INTO
// A FORMULA. if you follow this pattern, the formula will be self contained.
dtList << New Column( "adjusted",
formula( // random formula that uses all the variables AND shows an if() stmt
If( Expr( dlg["refPressure"] ) > Expr( dlg["pressureCol"][1] ),
Expr( dlg["temperatureCol"][1] ) + // first item of list
Expr( dlg["pressureCol"][1] ) + //
Expr( dlg["conFactor"] ) + // simple value
Expr( dlg["purFactor"] ) + //
Expr( dlg["refPressure"] )// do the ususal stuff...
, // else refPressure <= pressureCol...
Expr( dlg["temperatureCol"][1] ) + // first item of list
Expr( dlg["pressureCol"][1] ) + //
Expr( dlg["conFactor"] ) + // simple value
Expr( dlg["purFactor"] ) + //
Sqrt( Expr( dlg["refPressure"] ) )// do something extra for low ref
)
)
)
)
);Hier ist einiges los.
- formula() wertet sein Argument nicht aus, also müssen Sie ihm etwas helfen
- Ich greife auf die Technik eval(evalexpr(expr(...))) zurück. Es gibt andere Wege.
- Sie sagten, Sie brauchen ein if (...), also habe ich eins gemacht. Sie können jede beliebige JSL verwenden, die eine einfache Zahl als Ergebnis erzeugt. Das Ergebnis eines if() ist der letzte berechnete Wert.
- Wenn Sie eine Variable mehr als einmal in Ihrer Formel verwenden müssen, sehen Sie sich die obige Formel an.
- Offensichtlich ist meine Formel nicht die, nach der Sie suchen!
- Für einfache Formeln brauchen Sie nicht das ganze evalexpr-Zeug. Formel (: Druck * : Temperatur) funktioniert gut. Aber in diesem Beispiel kennen Sie die Namen der Spalten nicht; stattdessen kennen Sie den Namen einer Variablen, die den Namen der Spalte enthält.
Als Referenz gibt das dlg diese Liste zurück:
// this is what the dlg returns; the columns are a list of 1 item
// and the parameters are simple values:
//
// {temperatureCol = {:Temperature}, pressureCol = {:Pressure},
// Text Box, refPressure = 3, Text Box, conFactor = 33,
// Text Box, purFactor = 333, Button( 1 )}Sehen Sie sich schließlich die Formel an, die Sie mit dem Formeleditor erstellt haben, um sicherzustellen, dass sie wirklich Ihren Erwartungen entspricht!
Click the + next to the column name to open the formula in the editorClick the + next to the column name to open the formula in the editorClick the + next to the column name to open the formula in the editorKlicken Sie auf das + neben dem Spaltennamen, um die Formel im Editor zu öffnen
Betreff: Benötigen Sie Hilfe bei JSL für die druckkompensierte Temperaturformel- Lesen Sie den Skriptleitfaden in der JMP-Dokumentationsbibliothek, die bei der Installation von JMP heruntergeladen wurde
- Ich kann Ihnen ein bisschen mit der Benutzeroberfläche helfen, aber " Berechnen Sie die druckkompensierte Temperatur für jede Zeile mithilfe mehrerer IF-Anweisungen und mathematischer Ausdrücke unter Verwendung der UI-Daten. "ist zu vage, um Sie wirklich zu führen.

Hier ist die JSL für das oben Genannte.Sie müssen nur die Informationen aus dem Fenster nehmen und in Ihre Formeln einfügen.Lesen Sie die Abschnitte in der Dokumentation zu Column Dialog() und New Column()
names default to here(1);
dtList = New Table("Example Data",
new column("Temperature"),
new column("Pressure")
);
dlg = Column Dialog(
temperatureCol = ColList( "Temperature", Min Col( 1 ), Max Col( 2 ), Data Type( "Numeric" ) ),
pressureCol = ColList( "Pressure", Max Col( 1 ), Modeling Type( {"Continuous", "Multiple Response"} ) ),
Line Up( 2,
Text Box( "Reference Pressure" ), refPressure = EditNumber( . ),
Text Box( "Conversion Factor" ), conFactor = EditNumber( . ),
Text Box( "Purity Factor" ), purFactor = EditNumber( . )
));
show(dlg);