1548x
001459
2017-06-29

Interfaz COM en VBA | 4.1 Optimización de estructuras

Las secciones 4.1 y 4.2 de esta serie de artículos describen la optimización de un pórtico utilizando el módulo adicional RF-/STEEL EC3. Der fünfte Teil deckt dabei die Anbindung des Moduls und das Holen relevanter Stäbe ab. Auf die Elemente, welche in vorangegangenen Teilen bereits erläutert wurden, wird nicht nochmal eingegangen.

Filtrado de miembros relevantes

El objetivo es transferir sólo las barras de una determinada sección al cálculo de RF-/STEEL EC3. En el siguiente ejemplo, se deben filtrar todas las barras con la sección IPE 300. Para esto, es necesario obtener primero todas las secciones del programa principal:


'   Cree una cadena de una sección deseada
Dim crsc_descAs String

crsc_desc ="IPE 300"

' Obtener todas las secciones de RFEM
Dim crscs ()Is RFEM5.CrossSection
crscs = iModelData.GetCrossSections

' Bucle sobre todas las secciones
Dim crsc_noTan largo
crsc_no = -1
Dim iTan largo
Para i = 0To UBound (crscs, 1)
' Si la descripción de la sección es correcta, guarde el número de la sección
If InStr (LCase (crscs (i) .Description), LCase (crsc_desc))> 0Then
crsc_no = crscs (i) .No
Salir para
End If
Siguiente i

' Salga del programa si no se encuentra la sección deseada
If crsc_no = -1Then
Err.Raise 513, "Obtener número de sección","Sin sección con" "" & crsc_desc &"" "dentro de su descripción encontrada!"
End If

La descripción de la sección se debe sincronizar de la forma más general posible. Para esto, la descripción de la sección y la cadena que se va a buscar se establecen en minúsculas primero mediante "LCase" y luego se busca la cadena en la descripción de la sección. Si no se encuentra una sección adecuada, el número de la sección permanece en -1, que luego se puede solicitar y confirmar mediante una interrupción.

Después de este paso, se conoce el número de la sección y se pueden buscar las barras con este número de sección. Solo se debe adoptar la barra con esta sección al inicio y al final de la barra:

' Crear una cadena para la lista de barras y ponerla a cero
Dim mems_strAs String
mems_str = vbanullstr

' Obtener todos los miembros de RFEM
Dim mems ()Is RFEM5.Member
mems = iModelData.GetMembers

' Hacer un bucle sobre todas las barras
Para i = 0To UBound (notas, 1)
' Si una barra tiene este número de sección al principio y al final,
' luego tome este número en la cadena
If mems (i) .EndCrossSectionNo = crsc_noThen
If mems (i) .EndCrossSectionNo = mems (i) .StartCrossSectionNoThen
mems_str = mems_str & mems (i) .No & ","
End If
End If
Siguiente i

' Salir del programa si no se encuentra ningún miembro
If mems_str = vbanullstrThen
Err.Raise 514, "Obtener miembros","Ninguna barra con sección" "" & crsc_desc &"" "¡Encontrado!"
End If

Obtener la interfaz del módulo adicional

El enlace a un módulo es exactamente el mismo que el enlace a RFEM o RSTAB. La única diferencia es que no hay diferencia entre abrir una instancia ya abierta o abrir una nueva instancia, ya que siempre hay una instancia ya abierta:

' Obtener interfaz para el módulo
Dim iStec3Is STEEL_EC3.Module
Conjunto iStec3 = iModel.GetModule ("STEEL_EC3")

A continuación, se eliminan todos los casos de módulos existentes:

' Obtener el número de casos de módulos existentes
Dim contarTan largo
count = iStec3.moGetCaseCount

' Si hay algún caso, siempre elimine el primero de la tabla
If cuenta> 0Then
Para i = 0To cuenta - 1
iStec3.moDeleteCase i, AT_INDEX
Siguiente i
End If

Ahora, puede crear el caso deseado e introducir la barra a diseñar utilizando la cadena creada anteriormente.

' Cree el caso del módulo ' Optimización '
Dim iStec3CaseIs STEEL_EC3.ICase
Conjunto iStec3Case = iStec3.moSetCase (1,"Optimización")

' Establecer barras para el diseño
iStec3Case.moSetMemberList mems_str

Por último, pero no menos importante, puede introducir las combinaciones de carga deseadas:

' Establecer combinaciones de carga
Dim iStec3_uls_loads (0To 2)Is STEEL_EC3.ULS_LOAD

iStec3_uls_loads (0) .DesignSituation = DS_FUNDAMENTAL
iStec3_uls_loads (0) .No = 1
iStec3_uls_loads (0) .Type = ILOAD_GROUP

iStec3_uls_loads (1) .DesignSituation = DS_FUNDAMENTAL
iStec3_uls_loads (1) .No = 2
iStec3_uls_loads (1) .Type = ILOAD_GROUP

iStec3_uls_loads (2) .DesignSituation = DS_FUNDAMENTAL
iStec3_uls_loads (2) .No = 3
iStec3_uls_loads (2) .Type = ILOAD_GROUP

iStec3Case.moSetULSLoads iStec3_uls_loads

Resumen y perspectiva

Los procedimientos descritos en este artículo se pueden usar para todos los módulos que se pueden controlar mediante COM. El código fuente y el archivo de Excel ayudan a comprender mejor el tema. En mi próximo artículo, me gustaría profundizar en este tema y explicar el enlace entre los elementos en el módulo y en el programa principal.


Autor

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

Enlaces
Descargas