Objetivo del artículo

Este artículo continúa la explicación del anterior Uso de Dynamos en iFIX, en el que se sugería un procedimiento avanzado de gestión y uso de Dynamos, respecto a lo que ofrece iFIX por defecto.


En este caso se desarrolla el mismo principio, pero en un escenario de modelo de la PDB basado en objetos (Object Type” e “Instances”).


Para mayor claridad, se dará toda la explicación del caso utilizando un ejemplo concreto.


Modelo de objetos en la PDB

Se parte de una PDB en la que se ha definido previamente (desde Configuration Hub) una clase (“Object Type”) con 3 objetos (“object instances”)

La clase cuenta con 5 variables, que se llaman: ALIAS, LEVEL, MOTOR, VIN, VOUT

En la imagen siguiente se puede ver un objeto concreto de esta clase, con el nombre “TANK_001”, tal y como aparece en el editor de expresiones de una pantalla iFIX

La Dynamo a utilizar

A continuación se presenta una descripción completa de la Dynamo que se ha diseñado para trabajar en conjunción con esta clase de la PDB

Para representar este elemento se ha creado ya una Dynamo llamada "DynamoTank", alojada en el Dynamo Set “Opertek01.fds”

Nótese como la Dynamo tiene en su definición, una variable llamada “varTagGroup” que permitirá articular parte de la gestión avanzada de la Dynamo, tal y como se detalla en el artículo de anterior “Uso de Dynamos en iFIX”

La Dynamo, tiene 5 animaciones en total 

  • txtTitle:
    texto del "Site_Asset" 
  • dlLevel
    valor numérico indicador de nivel 
  • ColorVin
    animación color válvula entrada 
  • ColorVout
    animación color válvula salida 
  • ColorMotor
    animación color motor
 


Código VBA de la Dynamo (Edición)

Adicionalmente, la Dynamo ha sido creada con un formulario VBA (denominado “frmDyn1”), que gestionará su configuración. Este formulario sustituirá el formulario estándar de iFIX (“EditDynamo”), descrito en el artículo anterior “Uso de Dynamos en iFIX

Para construir este formulario, simplemente hay que arrastrar desde Toolbox el botón (que en el ejemplo se ha rotulado “Close”), el “label” (rotulado como “Asset Name”) y el “ExpressionToolbox” que permitirá abrir el control del mismo nombre.

Nota: El “ExpressionToolbox” no está disponible por defecto como un control para añadir.
Es preciso añadirlo desde la Toolbox de “Controls”:Interfaz de usuario gráfica, Aplicación

El contenido generado por IA puede ser incorrecto.

Además del formulario, la Dynamo cuenta con la siguiente función VBA, llamada “DynamoTank_Edit”.
Se trata de un script que tiene como objetivo:

  1. Presentar al usuario el formulario “frmDyn1”
  2. Asignar a las expresiones de la Dynamo desde donde se invoca el script, los valores de la PDB que corresponda
    (en función del objeto seleccionado por el usuario)
  • La variable “varTagGroup”,
    p.ej. "Fix32.NodeName.TANK_001" 
  • La propiedad "DynamoDescription" de la instancia de la Dynamo
    p.ej. "TANK_001" 
  • Asignar a cada una de las 5 animaciones de la Dynamo, la variable correspondiente dentro del objeto seleccionado
    p.ej. txtTitle:"TANK_001", dlLevel:"Fix32.NodeName.TANK_001>LEVEL.F_CV", ColorVin:"Fix32.NodeName.TANK_001>VIN.F_CV", ColorVout:"Fix32.NodeName.TANK_001>VOUT.F_CV", ColorMotor:"Fix32.NodeName.TANK_001>MOTOR.F_CV"

El script concreto, saltará al hacer click sobre la Dynamo en entorno de edición:

Private Sub DynamoTank_Edit()

Dim varObj As Object
Dim strTagGroup As String
Dim strTokens() As String

'Lanzamos un formulario, en el que solicitamos el nombre de objeto, de la vista modelo iFIX
' El formulario se llama formDyn1 y habría que importarlo
frmDyn1.Caption = "Tank Model v1.0 - www.Opertek.com"
frmDyn1.Show

strTagGroup = frmDyn1.ExpressionEditor1.EditText 'guardamos el nombre del objeto (instancia)
'--> p.ej. "Fix32.NodeName.TANK_001"
strTokens() = Split(strTagGroup, ".") 'troceamos esto en 3 partes. 
'p.ej. " Fix32 / NodeName / TANK_001"

varTagGroup.InitialValue = strTagGroup 'inicializamos variable de pantalla, con strTagGroup
varTagGroup.CurrentValue = strTagGroup

'Dynamo Description
DynamoTank.Description = strTokens(2) 'A la Dynamo que estamos modificando, 
'le ponemos "TANK_001" en la descripción


'Sustitucinones de los elementos de la dinamo con referencias a tags
'Title
Set varObj = FindLocalObject(DynamoTank, "txtTitle")
varObj.Caption = strTokens(2) 'Aquí es una propedad "caption", porque la 
'animación "txtTitle" va referida a un texto

'Level
Set varObj = FindLocalObject(DynamoTank, "dlLevel")
varObj.Source = strTagGroup + ">LEVEL.F_CV" 'Aquí es una propedad "source", porque la
'animación "dlLevel" va referida a una expresión

'Vin
Set varObj = FindLocalObject(DynamoTank, "ColorVin")
varObj.Source = strTagGroup + ">VIN.F_CV"

'Vout
Set varObj = FindLocalObject(DynamoTank, "ColorVout")
varObj.Source = strTagGroup + ">VOUT.F_CV"

'Motor
Set varObj = FindLocalObject(DynamoTank, "ColorMotor")
varObj.Source = strTagGroup + ">MOTOR.F_CV"

End Sub 

Código VBA de la Dynamo (Al hacer click sobre el elemento gráfico "")

Este segundo ejemplo de código, en este caso dedicado a hacer un togle sobre la variable del objeto "VIN".
Se utilizará por tanto para implementar acciones de control del usuario, a través de la Dynamo:

Private Sub grpVin_Click() 
  ToggleDigitalPoint varTagGroup.CurrentValue + ">VIN.F_CV" 
End Sub 

El script concreto, saltará al hacer click sobre el elemento "GRPVIN" de la Dynamo en entorno de ejecución