Interfejs COM w VBA | 4.1 Optymalizacja ramki

Artykuł o tematyce technicznej

Artykuł został przetłumaczony przez Google Translator Podgląd oryginalnego tekstu

W części 4.1 i 4.2 tej części artykułu dokonano optymalizacji ramki przy użyciu modułu dodatkowego RF- / STEEL EC3 . Piąta część wyjaśnia, w jaki sposób połączyć moduł z odpowiednimi prętami. Elementy już wyjaśnione w poprzednich częściach nie są ponownie opisane.

Rysunek 01 - System

Filtrowanie odpowiednich prętów

Celem jest przeniesienie prętów o określonym przekroju tylko do konstrukcji RF- / STEEL EC3. W poniższym przykładzie wszystkie pręty o przekroju IPE 300 powinny być filtrowane. W tym celu należy najpierw pobrać wszystkie przekroje z programu głównego:

' Create a string of a desired cross‑section
Dim crsc_desc As String
crsc_desc = "IPE 300"

' Get all cross-sections from RFEM
Dim crscs() As RFEM5.CrossSection
crscs = iModelData.GetCrossSections

' Lopp over all cross-sections
Dim crsc_no As Long
crsc_no = -1
DimAs Long
For i = 0 To UBound(crscs, 1)
' If the cross-section description is right, save the cross-section number
If InStr(LCase(crscs(i).Description), LCase(crsc_desc)) > 0 Then
crsc_no = crscs(i).No
Exit For
End If
Next i

' Quit the program if the desired cross-section was not found
If crsc_no = -1 Then
Err.Raise 513, "Get cross-section number", "No cross-section with "" " & crsc_desc & " "" within its description found!"
End If

Opis przekroju powinien być zsynchronizowany w sposób możliwie najbardziej ogólny. W tym celu zarówno opis przekroju, jak i szukany ciąg znaków są pisane małymi literami za pomocą funkcji "POZYCJA", a następnie w opisie przekroju wyszukiwany jest ciąg. Jeżeli nie zostanie znaleziony odpowiedni przekrój, numer przekroju pozostaje przy -1, który może zostać wywołany i potwierdzony przez przerwanie.

Po tym kroku numer przekroju jest znany i można wyszukiwać pręty o tym przekroju. Należy zastosować tylko pręt o takim przekroju na początku i końcu pręta.

' Create string for the list of members and set it to zero
Dim mems_str As String
mems_str = vbanullstr

' Get all members from RFEM
Dim mems() As RFEM5.Member
mems = iModelData.GetMembers

' Lopp over all members
For i = 0 To UBound(mems, 1)
' If a member has this cross-section number at the start and the end,
' then take this number in the string
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

' Quit the program if no member was found
If mems_str = vbanullstr Then
Err.Raise 514, "Get members", "No member with cross-section "" " & crsc_desc & " "" found!"
End If

Interfejs modułu dodatkowego

Łącze do modułu jest dokładnie takie samo, jak łącze do RFEM lub RSTAB. Jedyna różnica polega na tym, że nie ma różnicy pomiędzy otwarciem już otwartej instancji lub otwarciem nowej instancji, ponieważ zawsze istnieje jedna już otwarta instancja:

' Get interface for the module
Dim iStec3 As STEEL_EC3.Module
Set iStec3 = iModel.GetModule( "STEEL_EC3" )

Następnie usuwane są wszystkie istniejące przypadki modułów.

' Get number of existing module cases
Dim count As Long
count = iStec3.moGetCaseCount

' If there are any cases, always delete the first one in the table
If count > 0 Then
For i = 0 To count - 1
iStec3.moDeleteCase i, AT_INDEX
Next
End If

Teraz można utworzyć żądany przypadek i wprowadzić pręt, który ma zostać zaprojektowany, za pomocą utworzonego wcześniej ciągu znaków.

' Create the 'Optimization' module case
Dim iStec3Case As STEEL_EC3.ICase
Set iStec3Case = iStec3.moSetCase(1, "Optimization" )

' Set members for design
iStec3Case.moSetMemberList mems_str

Dodatkowo można wprowadzić żądane kombinacje obciążeń:

' Set load combinations
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

Podsumowanie i przegląd

Procedury opisane w tym artykule mogą być stosowane do wszystkich modułów, które mogą być sterowane przez COM. Kod źródłowy i plik Excel pomagają lepiej zrozumieć tematykę. W kolejnym artykule chciałbym zagłębić się w tę kwestię i wyjaśnić związek pomiędzy elementami w module oraz w programie głównym.

Do pobrania

Linki

Kontakt

Kontakt do Dlubal

Mają Państwo pytania lub potrzebują porady?
Zapraszamy do bezpłatnego kontaktu z nami drogą mailową, poprzez czat lub forum lub odwiedzenia naszej strony z FAQ z użytecznymi wskazówkami i rozwiązaniami.

+48 (32) 782 46 26

+48 730 358 225

info@dlubal.pl

RFEM Program główny
RFEM 5.xx

Program główny

Oprogramowanie do obliczeń płaskich i przestrzennych układów konstrukcyjnych, obejmujących płyty, ściany, powłoki, pręty (belki), bryły i elementy kontaktowe, z wykorzystaniem Metody Elementów Skończonych (MES)

Cena pierwszej licencji
3 540,00 USD
RFEM Konstrukcje stalowe i aluminiowe
RF-STEEL EC3 5.xx

Moduł dodatkowy

Wymiarowanie prętów stalowych wg EC 3

Cena pierwszej licencji
1 480,00 USD
RFEM Inne
RF-COM 5.xx

Moduł dodatkowy

Programowalny interfejs (API) w oparciu o technologię COM

Cena pierwszej licencji
580,00 USD