Re: Necesito ayuda con JSL para la fórmula de temperatura compensada por presión- Lea la Guía de secuencias de comandos en la biblioteca de documentación de JMP descargada cuando se instaló JMP
- Puedo ayudarte un poco con la interfaz de usuario, pero " Calcule la temperatura compensada por presión para cada fila usando varias declaraciones IF y expresiones matemáticas usando los datos de la interfaz de usuario. "es demasiado vago para guiarte realmente.

Aquí está el JSL para lo anterior. Solo necesitará tomar la información de la ventana y conectarla a sus fórmulas. Lea las secciones de la documentación sobre Diálogo de columna () y Nueva columna ()
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);Re: Necesito ayuda con JSL para la fórmula de temperatura compensada por presión¡Frio! No estoy seguro de haber usado el diálogo de columna, pero parece perfecto para este trabajo.
Después de ejecutar el ejemplo de Jim, pruebe un código como este para agregar una columna de fórmula a su tabla.
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
)
)
)
)
);Aquí están sucediendo varias cosas.
- formula () no evalúa su argumento, por lo que debes darle un poco de ayuda
- Recurro a la técnica eval (evalexpr (expr (...))). Hay otras formas.
- dijiste que necesitas un if (...) así que hice uno. Puede usar cualquier JSL que desee que produzca un número simple como resultado. El resultado de un if () es el último valor que calcula.
- si necesita usar una variable más de una vez en su fórmula, mire la fórmula anterior.
- ¡Claramente mi fórmula no es la que estás buscando!
- Para fórmulas simples, no necesita todas las cosas de evalexpr. fórmula (: presión *: temperatura) funciona bien. Pero en este ejemplo, no conoce los nombres de las columnas; en su lugar, conoce el nombre de una variable que contiene el nombre de la columna.
como referencia, el dlg devuelve esta lista:
// 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 )}Por último, asegúrese de mirar la fórmula que creó con el editor de fórmulas para asegurarse de que sea realmente lo que espera.
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 editorHaga clic en + junto al nombre de la columna para abrir la fórmula en el editor
Re: Necesito ayuda con JSL para la fórmula de temperatura compensada por presiónHola,
Que quieres decir con " ¿Temperatura compensada por presión "? Los detalles más específicos serían más fáciles para el soporte
Re: Necesito ayuda con JSL para la fórmula de temperatura compensada por presión @txnelson @Craige_Hales
¡Muchas gracias a ambos! Esto es exactamente lo que necesitaba. Puede que esto no sea óptimo, pero terminé creando columnas intermedias con fórmulas para derivar la temperatura compensada por presión (pct). No quería varias columnas intermedias en mi tabla de datos, así que eliminé la fórmula del pct y eliminé las columnas intermedias. Si alguna vez agrego más filas de datos, tendré que volver a ejecutar el script.
Pegué el código que se me ocurrió a continuación (pero tenga en cuenta que tuve que cambiar todas las constantes / coeficientes ya que es para mi trabajo)
//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"} );Necesita ayuda con JSL para la fórmula de temperatura con compensación de presiónHola,
Estoy buscando un ejemplo o alguna orientación sobre cómo empezar a escribir JSL para la siguiente temperatura con compensación de presión:
- Cree una interfaz de usuario para seleccionar una columna de temperatura y una columna de presión. También haga que el usuario ingrese una presión de referencia, un factor de conversión y un factor de pureza.
- Calcule la temperatura con compensación de presión para cada fila utilizando varias declaraciones IF y expresiones matemáticas utilizando los datos de la interfaz de usuario.
- Cree una nueva columna y rellénela con la temperatura con presión compensada calculada anteriormente.
¡Cualquier ayuda es apreciada!
Ingeniería de Calidad y Procesos