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
| ![]() | ![]() |
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”:
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:
- Presentar al usuario el formulario “frmDyn1”
- 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