3104x
001441
2017-05-23

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

La parte 2.2 de la serie de artículos sobre la interfaz COM describe la creación y modificación de apoyos en nudos, cargas, casos de carga, combinaciones de carga y combinaciones de resultados en un ejemplo de una barra. La cuarta parte explica la creación de herramientas individuales.

Fundamentos básicos

Queremos crear una herramienta que cree apoyos en nudos no lineales en los nudos seleccionados actualmente en el programa. Para hacer esto, se requieren los siguientes elementos clave:

  • Obtener los nodos seleccionados actualmente
  • Creación de apoyos en nudos
  • Crear y asignar no linealidad
  • Ejecución de una herramienta en el programa

Estos puntos deben explicarse ahora. Esto requiere el conocimiento de las partes anteriores de esta serie de artículos, que no se describirán nuevamente. Sin embargo, el código fuente disponible incluye comentarios que documentan los elementos mencionados anteriormente, como obtener la estructura.

Obtener el nodo seleccionado actualmente

Puede editar los elementos seleccionados a través de la interfaz COM utilizando las funciones ya conocidas, como IModelData.GetNodes para los nudos. Sin embargo, para devolver solo los elementos seleccionados, es necesario cambiar a editar la selección actual primero ingresando IModelData.EnableSelections. Si EnableSelections se establece en True, IModelData.GetNodes solo devuelve los elementos seleccionados. Aquí hay un ejemplo específico:

'Obtener los nodos seleccionados.
iModDat.EnableSelectionsVerdadero 'trabajar solo con el objeto seleccionado
Dim nodos () Is RFEM5.Node
nodes = iModDat.GetNodes
iModDat.EnableSelectionsFalso 'trabajar con todos los objetos de nuevo

Después de obtener los nodos seleccionados, EnableSelections se restablece a falso de nuevo, ya que esto a menudo puede causar errores. Dado que el soporte nodal requiere una lista de nodos como una cadena para la definición, esto se proporciona al mismo tiempo:

'Crear una lista de nodos.
Dim nodeListIs String
Dim iIs Long
Para i = 0ToUBound (nodos, 1)
nodeList = nodeList & nudos (i) .No & ","
Siguiente i

Creación de apoyos en nudos

La no linealidad, o el diagrama en el caso específico, es un elemento separado. Se puede asignar a un soporte nodal solo si ya está disponible en el sistema. Por lo tanto, es necesario crear primero el soporte nodal, siguiendo los principios explicados en los artículos anteriores:

'Crear soportes nodales.
Dim nodSupIs RFEM5.NodalSupport
nodSup.No = 100
nodSup.IsColumn =Falso
nodSup.IsValid =Verdadero
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 puede ver en el código, WorkingDiagramType se especifica como una no linealidad en la dirección z global.

Crear y asignar soporte no lineal

Después de preparar el soporte nodal para la no linealidad WorkingDiagramType, ahora se debe crear:

'Crear no linealidad.
Dim nldgrmIs RFEM5.NonlinearityDiagram

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

'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 una matriz bidimensional. La primera dimensión corresponde al conjunto de datos, la segunda dimensión a los elementos del conjunto de datos. En este caso, el primer elemento en el conjunto de datos es el desplazamiento en m, y el segundo elemento es la fuerza en N. Por lo tanto, el ejemplo anterior creó cuatro conjuntos de datos donde el tercer punto del diagrama en la ubicación es de 30 mm y 0.2 kN, por ejemplo. Esta no linealidad ahora se debe asignar al soporte existente. Para hacer esto, es necesario obtener la interfaz para el apoyo en nudo y luego para la no linealidad:

'Asignar no linealidad.
Dim iNodSupIs RFEM5.INodalSupport
Conjunto iNodSup = iModDat.GetNodalSupport (100, ItemAt.AtNo)
Dim iNldiagIs RFEM5.INonlinearityDiagram
Conjunto iNldiag = iNodSup.GetNonlinearity (AlongAxisZ)

iModDat.PrepareModification
iNldiag.SetData nldgrm
iModDat.FinishModification

En este caso, la no linealidad está a lo largo del eje Z, por lo que AlongAxisZ debe seleccionarse al obtener la no linealidad. La no linealidad se asigna en el bloque de modificación conocido.

Ejecución de una herramienta en el programa

Los programas externos se pueden integrar en RFEM. Para hacer esto, es necesario modificar el RFEM.ini en la ruta del programa. A diferencia de la programación en C# y VB donde se crea un archivo ejecutable, VBA requiere Excel para implementar la herramienta. Excel puede ser asignado por un argumento al abrir un archivo para ser abierto. Esto aparece en la línea de comandos de la siguiente manera (el archivo de Excel está en C: \ temp y Excel está instalado como una versión de 32 bits):
"C: \ Archivos de programa (x86) \ Microsoft Office \ Office15 \ EXCEL.EXE" C: \ temp \ table1.xlsm

Por lo tanto, Excel se abre con el archivo deseado. Para garantizar que RFEM solo abra el programa externo sin los argumentos adicionales (como el nombre del archivo detrás de EXCEL.EXE en este caso), es necesario crear primero un archivo por lotes de Windows. Windows maneja este archivo de texto simple que incluye la extensión ".bat" como un archivo ejecutable EXE. Por lo tanto, puede usar el editor para crear un archivo TXT, que incluye la nueva extensión de archivo ".bat". La opción para mostrar la extensión del archivo se debe configurar primero en el Explorador de Windows. Este archivo por lotes (en adelante, EXCEL-Tool.bat) debe incluir la siguiente entrada:
"C: \ Archivos de programa (x86) \ Microsoft Office \ Office15 \ EXCEL.EXE" C: \ temp \ table1.xlsm
Esto corresponde al comando tal como se introduciría en la línea de comando.

Después de crear este archivo ejecutable, se puede ingresar en RFEM.ini como una herramienta externa. RFEM.ini se incluye en la ruta del programa de RFEM (ruta predeterminada para RFEM 5.07 de 64 bits: C: \ Archivos de programa \ Dlubal \ RFEM 5.07). Allí, debe agregar las siguientes entradas:

ModuleName2 = Herramienta EXCEL
ModuleExeName2 = "c: \ temp \ EXCEL-Tool.bat"
ModuleDescription2 = Versión final de miembro no lineal

Por supuesto, el archivo por lotes EXCEL-Tool.bat y la macro table1.xlsm también se deben almacenar en C:/temp/.

Para ejecutar la macro automáticamente, debe iniciar la subrutina en la subrutina ejecutada automáticamente por Excel al abrir el archivo. Esta subrutina se llama Workbook_Open y debe almacenarse en Workbook.

Ahora necesitamos cerrar Excel después de ejecutarlo con éxito. Si se produce un error o RFEM no se abre, puede editar la macro. Para esto, se integra una distinción de casos. El borrador completo es el siguiente:

Privado SubWorkbook_Open ()

'El controlador de errores ejecuta RFEM.
On Error GoTo e

'Se recupera la interfaz con RFEM.
Dim iAppIs RFEM5.Application
Conjunto iApp = GetObject (, "RFEM5.Aplicación")

e: 'en caso de error, se visualiza "RFEM no abierto"
If Err.Number <> 0Then
MsgBox"RFEM no abierto"Fuente Err.
   Salir Sub
Fin If

'Programa de manejo de errores.
On Error GoTo f

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

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

'Lugar para su propio código fuente.

f: 'Error de intercepción del código fuente.
If Err.Number <> 0 Then
MsgBox Err.Description, , Err.Source
' La licencia COM se desbloquea, el acceso al programa es posible de nuevo
iModel.GetApplication.UnlockLicense
'La herramienta permite que Excel se abra cuando se produce un error.
   Exit Sub
End If

' La licencia COM se desbloquea, el acceso al programa es posible de nuevo
iModel.GetApplication.UnlockLicense
'La herramienta cierra Excel cuando se aplica con éxito.
Aplicación.Quit

End Sub

En este momento, sólo falta la referencia a la subrutina creada previamente, que se encuentra en "Lugar para su propio código fuente". El código fuente completo está disponible en el siguiente enlace.

Resumen

Este artículo sobre la creación de un apoyo en nudo no lineal describe la aplicación de un nuevo módulo externo y, por lo tanto, complementa las secciones anteriores de esta serie de artículos. La integración es más sencilla cuando se utilizan archivos ejecutables, que normalmente se crean con VisualStudio y VB o C #. Por lo tanto, se ha descrito el complejo proceso con Excel.


Autor

El Sr. Günthel proporciona soporte técnico para los clientes de Dlubal Software y se ocupa de sus solicitudes.

Enlaces
Descargas