1543x
001459
2017-06-29

Interfejs COM w VBA | 4.1 Optymalizacja ramki

Rozdziały 4.1 i 4.2 tej serii artykułów opisują optymalizację konstrukcji szkieletowej z wykorzystaniem modułu dodatkowego 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.

Filtrowanie odpowiednich prętów

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


'   Utworzyć ciąg o żądanym przekroju
Dim crsc_descJako ciąg

crsc_desc =„IPE 300”

' Pobranie wszystkich przekrojów z programu RFEM
Dim crscs ()As RFEM5.Cross Section
crscs = iModelData.GetCrossSections

' Pętla po wszystkich przekrojach
Dim crsc_nrJak długo
crsc_no = -1
Dim iJak długo
Jeżeli chcesz zadać krótkie pytanie techniczne, i = 0To UBound(crscs, 1)
' Jeżeli opis przekroju jest poprawny, należy zapisać numer przekroju
If InStr(LCase(crsc(i).Description), LCase(crsc_desc)) > 0Wtedy
crsc_no = crscs(i).No
Wyjdź po
End If
Następny i

' Zamykanie programu, jeżeli nie znaleziono żądanego przekroju
If crsc_no = -1Wtedy
Err.Raise 513, "Uzyskaj numer przekroju",„Brak przekroju z „” ” & crsc_desc &„ „”Znaleziono w opisie!”
End If

Opis przekroju powinien być zsynchronizowany w sposób jak najbardziej ogólny. W tym celu najpierw w opisie przekroju oraz w wyszukiwanym tekście zostają zapisane małe litery za pomocą „LCase”, a następnie wyszukiwany jest ciąg znaków w opisie przekroju. Jeżeli nie zostanie znaleziony odpowiedni przekrój, numer przekroju pozostaje -1, co można potwierdzić poprzez przerwanie.

Po tym kroku znany jest numer przekroju i można było rozpocząć wyszukiwanie prętów o tym numerze przekroju. Na początku i na końcu pręta należy przyjąć tylko pręt o takim przekroju:

' Utworzyć ciąg dla listy prętów i ustawić go na zero
Dim mems_strJako ciąg
mems_str = vbanullstr

' Pozyskaj wszystkie pręty z RFEM
Dim mem ()As RFEM5.Member
mems = iModelData.GetMembers

' Pętla nad wszystkimi prętami
Jeżeli chcesz zadać krótkie pytanie techniczne, i = 0To UBound(mems, 1)
'Jeżeli pręt ma na początku i na końcu numer przekroju,
', a następnie weź tę liczbę w łańcuchu
If mems(i).EndCrossSectionNo = crsc_noWtedy
If mems(i).EndCrossSectionNo = mems(i).StartCrossSectionNoWtedy
mems_str = mems_str & mems (i).No & ","
End If
End If
Następny i

' Zakończ program, jeżeli nie znaleziono pręta
If mems_str = vbanullstrWtedy
Err.Raise 514, "Pobierz członków",„Brak pręta o przekroju” ” & crsc_desc &„„Znalezione!
End If

Pobieranie interfejsu modułu dodatkowego

Połączenie z modułem jest dokładnie takie samo, jak połączenie z programem RFEM lub RSTAB. Jedyna różnica polega na tym, że nie ma różnicy pomiędzy otwarciem już otwartej instancji a otwarciem nowej, ponieważ zawsze otwarta jest jedna instancja:

' Pobranie interfejsu dla modułu
Dim iStec3As STEEL_EC3.Module
Ustawić iStec3 = iModel.GetModule ("STEEL_EC3")

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

' Uzyskaj liczbę istniejących przypadków modułów
Dim liczyćJak długo
Count = iStec3.moGetCaseCount

'Jeżeli występują przypadki, w tabeli należy usuwać zawsze pierwszy
If liczba > 0Wtedy
Jeżeli chcesz zadać krótkie pytanie techniczne, i = 0To ilość - 1
iStec3.moDeleteCase i, AT_INDEX
Następny i
End If

Teraz można utworzyć żądany przypadek i wprowadzić pręt, który ma zostać wymiarowany, przy użyciu wcześniej utworzonego łańcucha.

' Utworzyć przypadek modułu 'Optymalizacja'
Dim iStec3CaseAs STEEL_EC3.ICase
Ustawić iStec3Case = iStec3.moSetCase (1,„Optymalizacja”)

' Ustawić pręty do obliczeń
iStec3Case.moSetMemberList mems_str

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

' Ustawić kombinacje obciążeń
Dim iStec3_uls_loads (0To 2) As STEEL_EC3.ULS_LOAD

iStec3_uls_loads (0) .DesignSituation = DS_FUNDAMENTAL
iStec3_uls_loads (0) .No = 1
iStec3_uls_loads (0). Typ = 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). Typ = ILOAD_GROUP

iStec3Case.moSetULSLoads iStec3_uls_loads

Podsumowanie i potencjał rozwoju

Procedury opisane w tym artykule można stosować w przypadku wszystkich modułów, które mogą być kontrolowane przez COM. Pomocny jest kod źródłowy i plik Excel, dzięki któremu można lepiej zrozumieć temat. W następnym artykule chciałbym pogłębić tę kwestię i wyjaśnić powiązanie między elementami w module a programem głównym.


Autor

Pan Günthel zapewnia wsparcie techniczne klientom firmy Dlubal Software i zajmuje się ich zapytaniami.

Odnośniki
Pobrane