Actualización de modelos cruzados y ajuste de datos estructurales utilizando la interfaz COM

Artículo técnico

Este artículo fue traducido por el Traductor de Google

Ver texto original

Para algunas estructuras, es necesario diseñarlas en diferentes configuraciones. Puede ser que una plataforma de trabajo aérea deba analizarse en su posición en el suelo así como en la posición media y extendida. Dado que tales tareas requieren la creación de varios modelos, que son casi idénticos, la actualización de todos los modelos con un solo clic del ratón es un alivio considerable.

A continuación, se supone que tiene un conocimiento básico de la interfaz COM. Los enlaces proporcionan artículos sobre los conceptos básicos de la programación.

Tarea

El programa debería ajustar automáticamente cualquier dato estructural como nudos, líneas, barras, etc. al hacer clic en un botón determinado. Por ejemplo, las coordenadas del nudo 1 se deben transferir desde un modelo principal a varios modelos secundarios y variantes. Sin embargo, no se deben transferir todos los valores, sino sólo aquellos que el usuario haya definido previamente libremente.

Ejemplo de modelo

Como ejemplo para la función del programa descrito, se modeló una plataforma de trabajo aérea simple. El siguiente modelo se considera como el modelo principal.

Esta plataforma no está parametrizada y está disponible con tres tipos: completamente extendido, en el suelo y en una posición media. El tipo completamente extendido se define como el modelo principal, el del medio como el tipo 1 y el que está en el suelo como el tipo 2.

Consideraciones

Para lograr la tarea, se requiere un tipo de archivo de configuración o una interfaz gráfica de usuario para definir qué modelos se deben comparar entre sí.

Para definir las coordenadas libres o variables de un nudo, se debe usar la función de comentario del elemento respectivo. El programa busca una cadena específica en el comentario y, si la encuentra, modifica o deja las coordenadas correspondientes. Además, sería útil que se crearan nuevos elementos automáticamente en todos los submodelos. Por lo tanto, la estructura se debe hacer de tal manera que el usuario active el modelo deseado en RFEM (editado en primer plano) y el programa abra los modelos requeridos, comparándolos con el modelo principal.

interfaz gráfica de usuario

Se seleccionó el siguiente diseño simple para la interfaz gráfica de usuario.

El usuario puede escribir una ruta en el cuadro de texto o insertarla copiando y pegando. Con "Agregar nuevo modelo" se puede agregar a la lista de modelos para ajustar. Use el botón "Eliminar modelo seleccionado" para eliminar un modelo seleccionado en la lista. El botón "Modificar modelos" inicia el programa.

Flujo básico del programa

Al principio, el programa solo tiene las rutas de los modelos y variantes secundarios y primero necesita la conexión a RFEM. Si se establece la conexión con RFEM, entonces se debe ejecutar un bucle sobre los modelos secundarios. Dado que el programa también debe crear elementos, se debe observar la jerarquía. Por lo tanto, primero se comparan los nudos, luego las líneas, los materiales, las secciones y finalmente las barras. Los nudos representan una excepción, porque aquí se deben adoptar las direcciones x, y, z, si es necesario, o dejarlas como están. Todos los demás elementos se toman completamente o se dejan como están. Sin embargo, debería ser el mismo para todos los elementos que se creen nuevos.

Estructura básica del programa

El método que se ejecuta al hacer clic en el botón "Modificar modelos" tiene la siguiente estructura básica.

private void button_mod_click (remitente del objeto, EventArgs e)
{
//RFEM
//###########################
Dlubal.RFEM5.IModel3 iModel_org = null;
IApp de Dlubal.RFEM5.IApplication = nulo;
probar
{
//obtener la interfaz para la aplicación y abrir el modelo
iApp = Marshal.GetActiveObject ("RFEM5.Application") como Dlubal.RFEM5.IApplication;
iApp.LockLicense ();
iModel_org = iApp.GetActiveModel () como Dlubal.RFEM5.IModel3;
  
//recorrer los modelos encontrados
Dlubal.RFEM5.IModel iModel_cpy = nulo;
  
para (int i = 0; i <listBox_models.Items.Count; ++ i)
{
//modelo abierto
iModel_cpy = iApp.OpenModel (listBox_models.Items [i] .ToString ());
   
//obtener datos estructurales
Dlubal.RFEM5.IModelData2 iModData_org
= iModel_org.GetModelData () como Dlubal.RFEM5.IModelData2;
Dlubal.RFEM5.IModelData2 iModData_cpy
= iModel_cpy.GetModelData () como Dlubal.RFEM5.IModelData2;
   
//comparar/cambiar nodos
//comparar/cambiar líneas
//comparar/cambiar materiales
//comparar/cambiar secciones
//comparar/cambiar barras
}
  
}
catch (Excepción por ejemplo)
{
MessageBox.Show (por ejemplo, mensaje, por ejemplo, fuente);
}
finalmente
{
si (iApp! = nulo)
{
iApp.UnlockLicense ();
   
//Libera el objeto COM - ya no es necesario
//Marshal.ReleaseComObject (iApp);
iApp = nulo;
}
  
iModel_org = null;
  
//Limpia el recolector de basura para liberar todas las interfaces y objetos COM.
System.GC.Collect ();
System.GC.WaitForPendingFinalizers ();
}
}

Como ya se ha descrito, la conexión con RFEM se establece primero a través de GetActiveObject ("RFEM5.Application"). Luego, se establece una conexión con el modelo activo a través de GetActiveModel (). Para poder realizar la comparación, los submodelos y sus datos estructurales se abren uno tras otro en un bucle a través de las entradas en el cuadro de lista (GetModelData ()). En este momento, todos los datos geométricos están disponibles y se pueden comparar.

Si hay un problema, por ejemplo, no se puede abrir un modelo, el bloque try-catch detecta el error y se desbloquea el programa.

Comparación de nudos

La comparación de nodos entre el modelo principal y secundario es la siguiente.

Primero, se toman todos los nudos del modelo principal y se inicia un bucle sobre estos nudos. En este bucle, el sistema primero intenta obtener los datos del nudo con el mismo número en el modelo secundario. Si esto falla porque el nudo no existe, el error se detecta con otro bloque try-catch y en el modelo secundario se crea el nudo con los datos del modelo principal.

Si el nudo existe, el comentario se lee y se desmonta por medio del separador ";". Si hay menos de tres partes, los datos se tomarán del modelo principal. Si hay tres partes o más, se evaluarán. Una "f" representa un valor fijo que no se debe sobrescribir. Si no es una "f", el valor se sobrescribe con el valor del modelo principal.

Un ejemplo corto es la cadena "f ;; f1; kkl" en el comentario de un nudo. Una vez desmontadas, resultan las cadenas "f", "", "f1" y "kkl". Por lo tanto, se deja el valor x para el nudo y se sobrescriben los valores y y z, ya que hay una cadena vacía para y y no exactamente "f" sino "f1" para z.

//comparar/cambiar nodos
Dlubal.RFEM5.Node [] nodes_org = iModData_org.GetNodes ();
para (int j = 0; j <nodes_org.Length; ++ j)
{
probar
{
Dlubal.RFEM5.INode iNode = iModData_cpy.GetNode (nudos_org [j] .No, Dlubal.RFEM5.ItemAt.AtNo);
Nodo Dlubal.RFEM5.Node = nuevo Dlubal.RFEM5.Node ();
nudo = iNode.GetData ();
  
//comprobar, si hay componentes fijos
List <string> defs = (node.Comment) .Split (';'). ToList <string> ();
  
si (defs.Count> = 3)
{
si (defs [0]! = "f")
nodo.X = nudos_org [j] .X;
   
si (defs [1]! = "f")
nudo.Y = nudos_org [j] .Y;
    
si (defs [2]! = "f")
nodo.Z = nudos_org [j] .Z;
}
más
{
nodo.X = nudos_org [j] .X;
nudo.Y = nudos_org [j] .Y;
nodo.Z = nudos_org [j] .Z;
}
  
//establecer nudo
iModData_cpy.PrepareModification ();
iNode.SetData (nodo);
iModData_cpy.FinishModification ();
  
}
catch (Excepción por ejemplo)
{
//si los nudos no existen, créelo;
iModData_cpy.PrepareModification ();
iModData_cpy.SetNode (nudos_org [j]);
iModData_cpy.FinishModification ();
}
 
}

Líneas, materiales y otras comparaciones

Los otros elementos son ligeramente diferentes a la comparación de nudos pero idénticos entre sí.

//comparar/cambiar líneas
Dlubal.RFEM5.Line [] lines_org = iModData_org.GetLines ();
para (int j = 0; j <lines_org.Length; ++ j)
{
probar
{
Dlubal.RFEM5.ILine iLine = iModData_cpy.GetLine (lines_org [j] .No, Dlubal.RFEM5.ItemAt.AtNo);
Línea Dlubal.RFEM5.Line = nuevo Dlubal.RFEM5.Line ();
línea = iLine.GetData ();
  
//comprobar, si la línea es fija
Lista <cadena> defs = (línea.Comentario) .Split (';'). ToList <cadena> ();
  
si (defs [0]! = "f")
{
línea = líneas_org [j];
}
  
//establecer línea
iModData_cpy.PrepareModification ();
iLine.SetData (línea);
iModData_cpy.FinishModification ();
  
}
catch (Excepción por ejemplo)
{
//si los nudos no existen, créelo;
iModData_cpy.PrepareModification ();
iModData_cpy.SetLine (lines_org [j]);
iModData_cpy.FinishModification ();
}
 
}

La diferencia con la comparación de nudos es que el elemento se sobrescribe completamente si no se encuentra una "f" en el comentario desensamblado (desensamblado por ";"). Los otros elementos se crean y comparan exactamente de la misma manera. Vea el código fuente en el proyecto de Visual Studio adjunto.

Evaluación

El programa puede implementar los cambios deseados en los modelos secundarios. Cómo funciona se muestra en el video del artículo. El mayor problema es que las entradas incorrectas no se interceptan o solo se interceptan ligeramente.

Resumen y perspectiva

El programa presentado aquí es capaz de actualizar modelos secundarios basados en un modelo principal. Las modificaciones en los nudos y otros elementos hasta las barras se transfieren correctamente.

Lo que falta son rutinas para interceptar entradas incorrectas, que aún podrían agregarse. Otras optimizaciones serían, por ejemplo, el cierre opcional de modelos secundarios, lo que puede conducir a un procesamiento en segundo plano. También puede ser útil agregar más datos estructurales, cargas y combinaciones.

Palabras clave

COM supercombinación Grupos estructurales Modelo cruzado Actualizar Plataforma de trabajo aérea Plataforma de tijera

Descargas

Enlaces

Escribir un comentario...

Escribir un comentario...

  • Vistas 547x
  • Actualizado 5. enero 2021

Contacte con nosotros

¿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, | Curso de formación básico

Curso de formación en línea 29. enero 2021 8:30 - 12:30 CET

Curso de formación en línea | Inglés

RFEM para estudiantes | EEUU

Curso de formación en línea 3. febrero 2021 13:00 - 16:00 EST

Los errores de usuario más comunes con RFEM y RSTAB

Los errores de usuario más comunes con RFEM y RSTAB

Webinar 4. febrero 2021 14:00 - 15:00 CET

Curso de formación en línea | Inglés

RFEM, | Acero | EEUU

Curso de formación en línea 16. febrero 2021 9:00 - 12:00 EST

Curso de formación en línea | Inglés

Eurocódigo 2 | Estructuras de hormigón según DIN EN 1992-1-1

Curso de formación en línea 19. febrero 2021 8:30 - 12:30 CET

Curso de formación en línea | Inglés

RFEM, | Dinámica estructural y cálculo sísmico según EC 8

Curso de formación en línea 24. febrero 2021 8:30 - 12:30 CET

Curso de formación en línea | Inglés

Eurocódigo 5 | Estructuras de madera según EN 1995-1-1

Curso de formación en línea 17. marzo 2021 8:30 - 12:30 CET

Curso de formación en línea | Inglés

Eurocódigo 3 | Estructuras de acero según DIN EN 1993-1-1

Curso de formación en línea 18. marzo 2021 8:30 - 12:30 CET

Curso de formación en línea | Inglés

RFEM, | Dinámica | EEUU

Curso de formación en línea 23. marzo 2021 13:00 - 16:00 EST

Curso de formación en línea | Inglés

RFEM, | Curso de formación básico

Curso de formación en línea 23. abril 2021 8:30 - 12:30

Curso de formación en línea | Inglés

Eurocódigo 3 | Estructuras de acero según DIN EN 1993-1-1

Curso de formación en línea 6. mayo 2021 8:30 - 12:30

Curso de formación en línea | Inglés

Eurocódigo 2 | Estructuras de hormigón según DIN EN 1992-1-1

Curso de formación en línea 11. mayo 2021 8:30 - 12:30

Curso de formación en línea | Inglés

Eurocódigo 5 | Estructuras de madera según DIN EN 1995-1-1

Curso de formación en línea 20. mayo 2021 8:30 - 12:30

RFEM, | Dinámica estructural y cálculo sísmico según EC 8

Curso de formación en línea 2. junio 2021 8:30 - 12:30

Diseño de barras ADM 2020 en RFEM

Diseño de barras de aluminio según ADM 2020 en RFEM

Webinar 19. enero 2021 14:00 - 15:00 EST

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