Python es un lenguaje intérprete de código abierto y fácil de aprender para el que existen numerosas bibliotecas sobre temas como inteligencia artificial, estadística, numérica y mucho más. La introducción al lenguaje de programación Python no es objeto de esta documentación. Puede encontrarla, por ejemplo, en https://www.python.org/doc/.
Python puede ampliarse de forma muy flexible, lo que permite una integración elegante en FlexPro. La conocida biblioteca NumPy de Python proporciona los tipos de datos de matriz necesarios para procesar los datos de medición. Son la base para el intercambio de datos con FlexPro, razón por la cual NumPy también se instala cuando se instala FlexPro. Puede encontrar información sobre NumPy en https://numpy.org/doc/stable/.
El módulo flexpro
Cuando se inicializa Python en FlexPro, se registra el módulo flexpro de Python, que es la interfaz para FlexPro.
Las clases de Python flexpro.DataObject y flexpro.Object representan objetos de datos FlexPro y otros objetos FlexPro para que pueda acceder a sus propiedades. Los objetos de estas clases se crean mediante la función flexpro.object(), a la que se pasan como argumento la ruta y el nombre en la base de datos del objeto al que se quiere acceder.
o = flexpro.object(r'\Data\Dataset1') crea un DataObject que representa el conjunto de datos "\Data\Dataset1".
La variable this ya está inicializada en todas las fórmulas Python y contiene el DataObject que representa la propia fórmula Python.
this.name devuelve el nombre de la fórmula Python en forma de cadena.
this.data = np.linspace(0, 10, 100) devuelve una serie lineal de datos como resultado de la fórmula.
Nota En FPScript, cada instrucción devuelve un resultado que se asigna automáticamente a la fórmula como resultado. Este no es el caso en Python, y debe usar una asignación explícita this.data = ... Esto también se aplica a los resultados intermedios que desee ver como resultado de la fórmula en la ventana de inspección durante la búsqueda de errores con el depurador.
El objeto flexpro.Data
Los datos de FlexPro difieren de los datos de Python o NumPy en que pueden tener unidades y estructuras de datos compuestas con componentes Y, X y Z. Las listas también están disponibles en Python, pero no admiten elementos de lista con nombre. Por lo tanto, el módulo flexpro proporciona el tipo flexpro.Data, que puede representar datos FlexPro con todas las propiedades.
Puede crear un objeto flexpro.Data con datos FlexPro simples o compuestos utilizando el constructor flexpro.Data().
flexpro.Data(80.3, "dB") crea un valor escalar en coma flotante con la unidad "dB".
Este ejemplo crea una señal senoidal con componentes Y y X con unidades y la devuelve como resultado de la fórmula:
x = np.linspace(0, 10, 100)
y = np.sin(x)
this.data = flexpro.Data(y, "V", x, "s")
Si desea omitir las unidades, por ejemplo porque ya las ha introducido en el cuadro de diálogo de propiedades de la fórmula, debe nombrar los argumentos:
this.data = flexpro.Data(value_y = y, value_x = x)
Puede crear una lista FlexPro con dos elementos de lista con nombre de la siguiente manera, por ejemplo:
list = flexpro.named_list("Signal1", s1, "Signal2", s2)
Para concatenar listas FlexPro, debe usar la función flexpro.concat() en lugar del operador +, ya que este último añadiría los elementos de la lista uno a uno:
list = flexpro.concat(list, flexpro.named_list("Signal3", s3))
De forma similar, para añadir elementos a una lista FlexPro, debeusar la función flexpro.append() en lugar del operador +=:
flexpro.append(list, flexpro.named_list("Signal4", s4))
Puede crear listas sin nombres de elemento con el operador de Python [ ... ] o con la función flexpro.list(). Este último es algo más eficiente porque no es necesaria la conversión al formato de datos FlexPro cuando se transfiere a FlexPro.
La propiedad data de la clase flexpro.DataObject devuelve los datos del objeto de datos como objeto flexpro.Data.
data = flexpro.object(r'\Data Set').data
Si desea acceder directamente a los datos, utilice la función flexpro.call():
data = flexpro.call(r'\Data Set')
Se llama a una función FPScript o Python pasando los argumentos a flexpro.call():
data = flexpro.call(r'\MyFunction', flexpro.call(r'\Data Set'), flexpro.Data(5, 'V'))
La clase flexPro.Data tiene las propiedades value y unit. value proporciona los datos numéricos como tipo de datos de matriz de Python o NumPy y unit proporciona la unidad en forma de cadena.
flexpro.Data(1.3, "V").value devuelve 1.3 como número en coma flotante.
flexpro.Data(1.3, "V").unit devuelve "V" como cadena.
Para una estructura de datos compuesta, seleccione primero el componente:
signal = flexpro.call(r'\Data\Signal1')
signal.y devuelve un objeto flexpro.Data que representa el componente Y con unidad.
signal.y.value devuelve los datos del componente Y como matriz de NumPy.
signal.y.unit devuelve "V" como cadena.
Si dispone de una lista, seleccione primero el elemento:
list["Señal1"] devuelve un objeto flexpro.Data que representa los datos del elemento de lista "Señal1".
Para las listas sin nombre o con nombres ambiguos, debe utilizar un índice numérico:
list[0]
FlexPro adjunta la información de cabecera de este objeto de datos a un objeto flexpro.Data originado a partir de un objeto de datos. Estas son esencialmente las propiedades que puede especificar en la pestaña General del objeto de datos.
Puede tener acceso de lectura y escritura a estas propiedades:
data = flexpro.call(r'\Signal')
data.unit_y devuelve la unidad Y del objeto de datos del que procede el valor, es decir, de "Señal".
data.comments_x = "tiempo" Asigna un comentario X a los datos. Sin embargo, el acceso de escritura no es al objeto de datos "Señal" del que procede data, sino a una copia local de este atributo asignada al objeto de datos.
Uso de funciones FPScript en Python
El módulo flexpro permite acceder a todas las funciones de FPScript en Python. Los argumentos se convierten a objetos flexpro.Data si no son de este tipo. El resultado se devuelve como un objeto flexpro.Data.
Operaciones Python compatibles
Con los objetos flexpro.Data también puede utilizar numerosas operaciones Python. Es compatible con las operaciones aritméticas, la operación de comparación y algunas funciones de conversión de tipos. Al igual que en FPScript, cuando se calculan objetos flexpro.Data en Python, las unidades también se calculan.
La siguiente tabla ofrece una vista general e indica el operador FPScript equivalente que se utiliza en cada caso.
Operador Python/función |
Operador FPScript/función |
|---|---|
A + B, A += B |
|
A - B, A -= B |
|
-A |
|
A * B, A *= B |
|
A / B, A /= B |
|
A % B, A %= B |
|
A @ B, A @= B |
MatrixMultiplication() |
abs(A) |
Absolute() |
A ** B, pow(A, B. C) |
|
~A |
|
A | B, A |= B |
|
A & B, A &= B |
|
A ^ B, A ^= B |
|
A >> B, A >>= B |
|
A << B, A <<= B |
|
int(A) |
|
float(A) |
|
bool(A) |
|
A == B |
|
A >= B |
|
A > B |
|
A <= B |
|
A < B |
|
A != B |
Para los operadores de FPScript que no tienen un operador equivalente en Python, existen funciones correspondientes en el módulo flexpro.
La siguiente tabla muestra los operadores y sus funciones de Python correspondientes:
Operador FPScript |
Función Python |
|---|---|
flexpro.sign() |
|
flexpro.bundle() |
|
flexpro.lin_series() |
|
flexpro.list(), flexpro.named_list() |
|
flexpro.concat() |
|
flexpro.mult() |
|
flexpro.ChangeDataType() |
|
flexpro.absolute_time() |
|
flexpro.relative_time() |
|
Unit *) |
flexpro.ChangeUnit() |
flexpro.value() |
|
flexpro.complex() |
|
flexpro.conj() |
|
flexpro.idx() |
|
flexpro.validx() |
|
flexpro.call(), flexpro.object() |
|
flexpro.listidx() |
|
flexpro.append() |
|
flexpro.idx_assign(), flexpro.validx_assign() |
*) No existe una función de Python para este operador, ya que su funcionalidad está cubierta por la función de FPScript mencionada.
Véase también