Interfaz COM en VBA | 3. Creación de una herramienta

Artículo técnico

La parte 2.2 de las series de artículos sobre la interfaz COM describe la creación y modificación de apoyos en nudo, cargas, casos de cargas, combinaciones de cargas y combinaciones de resultados en un ejemplo de una barra. Esta parte explica cómo crear herramientas individuales.

Figura 01 - Herramienta EXCEL creada individualmente en RFEM

Conceptos básicos

Queremos crear una herramienta que cree apoyos en nudos no lineales en el nudo actualmente seleccionado en el programa. Para ello son necesarios los siguientes elementos principales:

  • Obtención de los nudos seleccionados actualmente
  • Creación de apoyos en nudos
  • Creación y asignación de elementos no lineales
  • Crear herramientas en el programa

A continuación, se procesarán estos puntos. Para esto, se requiere el conocimiento de los artículos anteriores y no se discutirá de nuevo. Sin embargo, los elementos ya disponibles en el código fuente disponible, como obtener la estructura en los comentarios, están casi documentados.

Obtención de los nudos seleccionados actualmente

La edición de los elementos seleccionados a través de la interfaz COM se realiza utilizando las funciones ya conocidas, como IModelData.GetNodes para nudos. Para devolver solo los elementos seleccionados, tiene que cambiar a la edición de la selección actual a través de IModelData.EnableSelections. Si EnableSelections se establece en "True", IModelData.GetNodes solo devuelve los elementos seleccionados. Aquí está el ejemplo concreto:

"Obtener los nudos seleccionados"
iModDat.EnableSelectionsTrue "Solo trabajo con objetos seleccionados
Dim nodes () as RFEM5.Node
nodes = iModDat.GetNodes
iModDat.EnableSelections False "volver a trabajar con todos los objetos"

Una vez que se han captado los nudos seleccionados, EnableSelections se establece de nuevo en "False" porque puede convertirse en una fuente frecuente de errores. El apoyo en nudo requiere una lista de nudos como una cadena, se crea de la siguiente manera:

'Crear lista de nudos
Dim nodeList As String
DimAsLong
For i = 0 ToUBound(nodes, 1)
   nodeList = nodeList & nodes(i).No & ","
Next i

Creación de apoyos en nudos

La no linealidad, en este caso el diagrama, es un elemento separado. Solo se puede asignar a un apoyo en nudos si ya está disponible en la estructura. Por lo tanto, es necesario crear un apoyo en nudos según los principios conocidos de las contribuciones anteriores:

'Crear apoyos en nudos
Dim nodSupAs RFEM5.NodalSupport
nodSup.No = 100
nodSup.IsColumn = False
nodSup.IsValid = True
nodSup.nodeList = nodeList
nodSup.ReferenceSystem = GlobalSystemType

nodSup.RestraintConstantX = 0.01
nodSup.RestraintConstantY = 0.01
nodSup.RestraintConstantZ = 0.01

nodSup.SupportConstantX = -1
nodSup.SupportConstantY = -1
nodSup.SupportConstantZ = -1

'Definir no linealidad'
nodSup.SupportNonlinearityZ = WorkingDiagramType

iModDat.PrepareModification
iModDat.SetNodalSupport nodSup
iModDat.FinishModification

Como se puede ver en el código, el tipo WorkingDiagramType se indica como no lineal en la dirección global z.

Creación y asignación de apoyos no lineales

Ahora que se ha preparado el apoyo en nudo para el WorkingDiagramType no lineal, se debe crear:

''Crear no linealidad"
Dim nldgrmAs RFEM5.NonlinearityDiagram

nldgrm.ForceType = StiffnessDiagramForceType.NoneStiffnessForce
nldgrm.PositiveZoneType = DiagramAfterLastStepType.StopDiagramType
nldgrm.Symmetric = True

'Crear diagrama
ReDim nldgrm.PositiveZone(3, 1)
nldgrm.PositiveZone(0, 0) = 0#
nldgrm.PositiveZone(0, 1) = 0#

nldgrm.PositiveZone(1, 0) = 0.01
nldgrm.PositiveZone(1, 1) = 100

nldgrm.PositiveZone(2, 0) = 0.03
nldgrm.PositiveZone(2, 1) = 200

nldgrm.PositiveZone(3, 0) = 0.05
nldgrm.PositiveZone(3, 1) = 300

El diagrama consiste en un campo bidimensional. La primera dimensión corresponde al registro de datos y la segunda dimensión a los elementos del conjunto de datos. Aquí, el primer elemento en el conjunto de datos es el desplazamiento en m y el segundo la fuerza en N. El ejemplo anterior se crean así cuatro conjuntos de datos, por ejemplo, donde el tercer punto del diagrama es 30 mm y 0,2 kN. Esta no linealidad ahora se debe asignar al apoyo disponible. Para hacer esto, llevamos la interfaz al apoyo en nudo y luego a la no linealidad:

"Aplicar no linealidad"
Dim iNodSupas RFEM5.INodalSupport
Set iNodSup = iModDat.GetNodalSupport(100,ItemAt.AtNo)
Dim iNldiagAs RFEM5.INonlinearityDiagram
Set iNldiag = iNodSup.GetNonlinearity(AlongAxisZ)

iModDat.PrepareModification
iNldiag.SetData nldgrm
iModDat.FinishModification

La no linealidad se encuentra a lo largo del eje Z y, por lo tanto, se debe seleccionar cuando se obtiene LengthAxisZ. Se asignan en el llamado "Modification Block" o bloque de modificaciones.

Crear herramientas en el programa

En RFEM, es posible integrar programas externos. Para hacer esto, debe modificar RFEM.ini en la ruta del programa. A diferencia de la programación en C# y VB, donde se crea un archivo ejecutable, se debe usar Excel para la ejecución de la herramienta en VBA. A Excel se le puede asignar un archivo abierto usando un argumento al inicio. Esto se vería así en la línea de comandos, donde el archivo de Excel se almacena en C:\temp y Excel se instala como una versión de 32 bits:
"C:\Program Files (x86)\Microsoft Office\Office15\EXCEL.EXE" C:\temp\tabelle1.xlsm

Esto abre Excel con el archivo deseado. Como solo se puede abrir un programa externo de RFEM sin argumentos adicionales (como el nombre de archivo EXCEL.EXE en este caso), tiene que crear un archivo por lotes de Windows.Este archivo de texto simple con la extensión de archivo ".bat" es como Windows cubre un archivo EXE ejecutable. Para crear un archivo TXT, debe crear un archivo TXT, por ejemplo, que reciba la nueva extensión de archivo ".bat" después de que se haya creado. Este archivo por lotes (en adelante EXCEL-Werzeug.bat) debe tener la siguiente entrada:
"C:\Program Files (x86)\Microsoft Office\Office15\EXCEL.EXE" C:\temp\tabelle1.xlsm
Esto corresponde al comando tal como se introduciría en la línea de comando.

Después de crear el archivo ejecutable, puede introducirlo en el archivo RFEM.ini como una herramienta externa. RFEM.ini está ubicado en la ruta de acceso del programa de RFEM (Estándar para RFEM 5.07 de 64 bits: C:\Program Files\Dlubal\RFEM 5.07). Se Debe agregar las siguientes entradas:

ModuleName2 = Herramienta EXCEL
ModuleExeName2="c:\temp\EXCEL-Werkzeug.bat"
ModuleDescription2=Articulación en el extremo de la barra no lineal

Por supuesto, debe guardar el archivo por lotes EXCEL-Werkzeug.bat y el macro table1.xlsmauch bajo C:/temp/.

Para garantizar que el macro también se ejecute automáticamente, debe iniciar la subrutina en la subrutina que Excel ejecuta automáticamente al abrirla. Ésta se llama Workbook_Open y se debe almacenar en el libro de trabajo.

Figura 02 - Programa Workbook_Open en Workbook

Ahora falta que Excel se cierre después de una ejecución válida. Si se produce un error o no se abre RFEM, la macro se debería poder editar. Para ello, se incorporará una distinción de caso. La plantilla completa se ve así:

Private SubWorkbook_Open()

'Error al manejar el inicio de programa de rutina RFEM
On Error GoTo e

'Traer la interfaz a RFEM
Dim iApp AsRFEM5.Application
Set iApp = GetObject(, "RFEM5.Application")

e: 'Si se produce un error, se visualiza" RFEM not open"
If Err.Number <> 0 Then
   MsgBox "RFEM not open", , Err.Source
   Exit Sub
End If

'Error al manejar el programa de rutina
On Error GoTo F

' La licencia COM y el acceso al programa están bloqueados
iApp.LockLicense

' Obtener interfaz para el modelo activo
Dim iModelAs RFEM5.model
If iApp.GetModelCount > 0Then
   Set iModel = iApp.GetActiveModel
Else
' Errores si no hay suficientes modelos disponibles
Err.Raise vbObjectError, "LoadModel()", "iApp.GetModelCount < 1"
End If

' Espacio para el código fuente propio

f: ' Interceptar errores del código fuente
If Err.Number <> 0 Then
   MsgBox Err.Description, , Err.Source
   ' Se libera la licencia COM, el acceso al programa es posible de nuevo
   iModel.GetApplication.UnlockLicense
   ' La herramienta debe mantener Excel abierto cuando se produce un error
   Exit Sub
End If

Se libera la licencia COM, se puede volver a acceder al programa
iModel.GetApplication.UnlockLicense
' La herramienta debe cerrar Excel cuando la aplicación tenga éxito
Aplicación.Quit

End Sub

Ahora, lo único que falta es la referencia a la subrutina creada previamente, que se puede encontrar en "Lugar para el código fuente propio". El código fuente completo está disponible en el siguiente enlace.

Resumen

La creación del apoyo en nudo no lineal es un complemento de las contribuciones anteriores, mientras que la creación de un módulo externo es un nuevo territorio. La incrustación es menos problemática cuando se utilizan archivos ejecutables, como los creados normalmente con la ayuda de Visual Studio y VB o C#. Por esta razón, aquí se ha descrito el procedimiento más complejo con Excel.

Descargas

Enlaces

Contacte con nosotros

Contacte con Dlubal Software

¿Tiene preguntas o necesita asesoramiento?
Contacte con nosotros a través de nuestro servicio de asistencia gratuito por correo electrónico, chat o fórum, o encuentre varias soluciones sugeridas y consejos útiles en nuestra página de preguntas más frecuentes (FAQ).

+34 911 438 160

info@dlubal.com

RFEM Programa principal
RFEM 5.xx

Programa principal

Software de ingeniería estructural de análisis por elementos finitos (AEF) para sistemas estructurales planos o espaciales compuestos de barras, placas, muros, láminas, sólidos y elementos de contacto

Precio de la primera licencia
3.540,00 USD
RFEM Otros
RF-COM 5.xx

Módulo adicional

Interfaz programable (API) basada en tecnología COM

Precio de la primera licencia
580,00 USD