Rozhraní COM ve VBA | 4.1 Optimalizace rámu

Odborný článek

V části 4.1 a 4.2 této série se budeme zabývat optimalizací rámu pomocí přídavného modulu RF-/STEEL EC3. V následující části přitom popíšeme připojení modulu a vyvolání relevantních prutů. Prvky, kterým jsme se věnovali v předchozích článcích série, již ponecháme stranou.

Vyfiltrování příslušných prutů

Cílem je převést k posouzení v modulu RF-STEEL EC3 pouze pruty určitého průřezu. Pro náš příklad se mají vyfiltrovat všechny pruty s průřezem „IPE 300“. Nejdříve vyvoláme všechny průřezy z hlavního programu:

' Vytvořit znakový řetězec požadovaného průřezu
Dim crsc_desc As String
crsc_desc = "IPE 300"

' Vyvolat všechny průřezy z programu RFEM
Dim crscs() As RFEM5.CrossSection
crscs = iModelData.GetCrossSections

' Smyčka přes všechny průřezy
Dim crsc_no As Long
crsc_no = -1
DimAs Long
For i = 0 To UBound(crscs, 1)
 ' Pokud označení průřezu souhlasí, uložit číslo průřezu
 If InStr(LCase(crscs(i).Description), LCase(crsc_desc)) > 0 Then
  crsc_no = crscs(i).No
  Exit For
 End If
Next i

' Ukončit program, pokud požadovaný průřez nebyl nalezen
If crsc_no = -1 Then
 Err.Raise 513, "Get cross-section number", "No cross-section with "" " & crsc_desc & " "" within its description found!"
End If

Při porovnávání označení průřezu by se mělo postupovat pokud možno obecně. Nejdříve se převede označení průřezu a také hledaný znakový řetězec pomocí „LCase“ na malá písmena a následně se vyhledává znakový řetězec v označení průřezu. Jestliže se nenajde odpovídající průřez, zůstává číslo průřezu -1, následuje dotaz a přerušení programu.

Po tomto kroku známe číslo průřezu a lze hledat pruty s daným číslem průřezu. Převzít se přitom mají pouze pruty, které mají příslušný průřez na počátku i na konci:

' Vytvořit znakový řetězec pro seznam prutů a nastavit na nulu
Dim mems_str As String
mems_str = vbanullstr

' Vyvolat všechny pruty z programu RFEM
Dim mems() As RFEM5.Member
mems = iModelData.GetMembers

' Smyčka přes všechny pruty
For i = 0 To UBound(mems, 1)
 ' Pokud má prut průřez s daným číslem na počátku i na konci,
 ' převezme se jeho číslo do znakového řetězce
 If mems(i).EndCrossSectionNo = crsc_no Then
  If mems(i).EndCrossSectionNo = mems(i).StartCrossSectionNo Then
   mems_str = mems_str & mems(i).No & ","
  End If
 End If
Next i

' Ukončit program, pokud nebyl nalezen žádný prut
If mems_str = vbanullstr Then
 Err.Raise 514, "Get members", "No member with cross-section "" " & crsc_desc & " "" found!"
End If

Vyvolat rozhraní přídavného modulu

Modul se připojí stejně jako hlavní program RFEM nebo RSTAB. Jediný rozdíl spočívá v tom, že se zde nerozlišuje mezi otevřením již otevřené instance a otevřením nové instance, protože je tu vždy již jedna otevřená instance:

' Vyvolat rozhraní pro modul
Dim iStec3 As STEEL_EC3.Module
Set iStec3 = iModel.GetModule("STEEL_EC3")

Dalším krokem je smazání všech stávajících případů v modulu:

' Vyvolat počet stávajících případů v modulu
Dim count As Long
count = iStec3.moGetCaseCount

' Pokud případy existují, vždy smazat první v tabulce
If count > 0 Then
 For i = 0 To count - 1
  iStec3.moDeleteCase i, AT_INDEX
 Next i
End If

Následně lze založit požadovaný případ a pomocí již vytvořeného znakového řetězce zadat pruty pro posouzení:

' Vytvořit případ v modulu "Optimalizace"
Dim iStec3Case As STEEL_EC3.ICase
Set iStec3Case = iStec3.moSetCase(1, "Optimization")

' Zadat pruty pro posouzení
iStec3Case.moSetMemberList mems_str

Nakonec se ještě zadají požadované kombinace zatěžovacích stavů:

' Zadat kombinace zatížení
Dim iStec3_uls_loads(0 To 2) As 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

Shrnutí a výhled

Uvedené postupy platí pro všechny moduly, které lze připojit přes COM rozhraní. Zdrojový kód a soubor Excel umožňují ještě lépe proniknout do dané problematiky. V následujícím článku bychom chtěli jít ještě více do hloubky a ukázat si, jak lze provázat prvky v modulu a v hlavním programu.

Ke stažení

Odkazy

Kontakt

Kontakt

Máte dotazy nebo potřebujete poradit?
Kontaktujte prosím kdykoli naši bezplatnou technickou podporu e-mailem, na chatu nebo na fóru anebo se podívejte do sekce často kladených dotazů (FAQ).

+420 227 203 203

info@dlubal.cz

RFEM Hlavní program
RFEM 5.xx

Hlavní program

Program RFEM pro statické výpočty metodou konečných prvků umožňuje rychlé a snadné modelování konstrukcí, které se skládají z prutů, desek, stěn, skořepin a těles. Pro následná posouzení jsou k dispozici přídavné moduly, které zohledňují specifické vlastnosti materiálů a podmínky uvedené v normách.

Cena za první licenci
3 540,00 USD
RFEM Ocelové a hliníkové konstrukce
RF-STEEL EC3 5.xx

Přídavný modul

Posouzení ocelových prutů podle EC 3

Cena za první licenci
1 480,00 USD
RFEM Ostatní
RF-COM 5.xx

Přídavný modul

Programovatelné rozhraní COM

Cena za první licenci
580,00 USD