1737x
001408
2017-03-02

Interfejs COM w VBA | 2.2 Tworzenie pręta


Dim iApp As RFEM5.Aplikacja
Ustawić iApp = GetObject (, „RFEM5.Aplikacja”)
Następnie uruchamia się moduł obsługi błędu i licencja jest zablokowana:
„Moduł obsługi błędów
W przypadku błędu Idź do e

'Licencja COM i dostęp do programu są zablokowane.
iApp.LockLicense

Zalecamy uruchomienie programu obsługi przed zablokowaniem licencji; w przeciwnym razie program RFEM pozostaje zablokowany w przypadku błędu i można go zamknąć tylko za pomocą Menedżera zadań. Ponieważ interfejs jest już gotowy do zastosowania, można uzyskać interfejs dla modelu:

'Uzyskaj interfejs dla pierwszego modelu.
Dim iModel As RFEM5.model
If iApp.GetModelCount> 0 Więc
Ustawić iModel = iApp.GetModel (0)
Else
Err.Raise vbObjectError, "LoadModel ()",„iApp.GetModelCount <1”
End If

Aby uzyskać lepszą obsługę błędów, przed pobraniem można sprawdzić, czy model jest rzeczywiście dostępny (w tym przypadku GetModelCount). Nawet w przypadku innych interfejsów, takich jak interfejs dla przypadków obciążeń lub obciążeń, można lepiej zgłaszać błędy.

Utwórz podpory węzłowe

Należy utworzyć belkę jednoprzęsłową, a ponieważ pręt znajduje się wzdłuż osi x, przesunięcie x, y, z oraz obrót wokół osi x i z muszą zostać zablokowane również na Węźle 1. Podpora w węźle 2 jest podobna do pierwszej do bezpłatnej translacji w kierunku x. Przed utworzeniem podpór węzłowych nadal konieczne jest pobranie interfejsu dla danych modelu. Podczas definiowania podpory należy zwrócić uwagę, aby w przypadku stopni swobody liczba stopni swobody została zrównana z zwolnieniem za pomocą stałej sprężystości. Tutaj używane są również jednostki SI; to znaczy N/m lub N/rad:

'Uzyskaj interfejs dla danych modelu.
Dim iModelData As RFEM5.iModelData
Ustawić iModelData = iModel.GetModelData ()

'Utworzyć podpory węzłowe.
Dim nodsups (0 To 1)As RFEM5.NodalSupport
nodsups (0) .No = 1
nodsups (0) .nodeList = „1”
nodsups (0) .RestraintConstantX = -1
nodsups (0) .RestraintConstantY = 0 #
nodsups (0) .RestraintConstantZ = -1
nodsups (0) .SupportConstantX = -1
nodsups (0) .SupportConstantY = -1
nodsups (0) .SupportConstantZ = -1

nodsups (1). nr = 2
nodsups (1) .nodeList = „2”
nodsups (1) .RestraintConstantX = -1
nodsups (1) .RestraintConstantY = 0 #
nodsups (1) .RestraintConstantZ = -1
nodsups (1) .SupportConstantX = 0 #
nodsups (1) .SupportConstantY = -1
nodsups (1) .SupportConstantZ = -1

Ewentualne problemy mogą być spowodowane przez niewłaściwy typ danych. Jeżeli wymagane jest podwojenie liczby, liczba całkowita może powodować błędy. Z tego względu po wartości całkowitej konieczne jest dodanie klawisza skrótu, aby został użyty jako wartość podwójna.

Oczywiście, wsparcie węzłowe musi zostać ponownie przeniesione do trybu edycji (PrepareModification/FinishModification):

'Przenieść podpory węzłowe.
iModelData.PrepareModification
iModelData.SetNodalSupports nodsups
iModelData.FinishModification

Utworzyć przypadki obciążeń

Aby utworzyć obciążenia, należy najpierw zdefiniować przypadki obciążeń, dokładnie tak, jak w programie RFEM. Podczas programowania przypadki obciążeń są tworzone i przenoszone jako pierwsze, a dopiero potem obciążenia mogą być przenoszone za pomocą interfejsów przypadków obciążeń. Najpierw tworzymy przypadki obciążeń:

'Uzyskaj interfejs dla obciążeń.
Dim iLoads As RFEM5.iLoads
Ustawić iLoads = iModel.GetLoads

'Utworzyć przypadki obciążeń.
Dim przypadki obciążeń (0 To 2) As RFEM5.LoadCase

skrzynie obciążeń (0). obciążenie nie = 1
loadcases (0) .SelfWeight = Prawda
loadcases (0) .ToSolve = Prawda
loadcases (0) .SelfWeightFactor.X = 0
loadcases (0) .SelfWeightFactor.Y = 0
loadcases (0) .SelfWeightFactor.Z = 1
loadcases (0) .ActionCategory = Stałe

Do utworzenia są trzy przypadki obciążeń: ciężar własny, śnieg i obciążenie użytkowe. W programowaniu COM wszystkie identyfikatory są w języku angielskim. Z tego względu w przypadku ActionCategory w przypadku obciążenia ciężarem własnym stosowana jest wartość Stała. Dla właściwości SelfWeightFactor można ustawić kierunek oraz wartość ciężaru własnego. Obowiązują one jednak tylko wtedy, gdy dla właściwości Ciężar własny ustawiona jest wartość True. Ponadto w polu ToSolve należy ustawić także wartość True, aby uwzględnić przypadek obciążenia w obliczeniach i przydzielić numer do przypadku obciążenia (.Loading.No). Pozostałe dwa przypadki obciążeń są łatwiejsze do zdefiniowania, ponieważ nie ma tu ciężaru własnego:

skrzynie obciążeń (1). obciążenie nie = 2
loadcases (1) .SelfWeight = Fałsz
loadcases (1) .ToSolve = Prawda
loadcases (1) .ActionCategory = ShowHLowerThan1000

skrzynie obciążeń (2). obciążenie nie = 3
loadcases (2) .SelfWeight = Fałsz
loadcases (2) .ToSolve = Prawda
loadcases (2) .ActionCategory = ImposedCategoryA

'Przenieść przypadki obciążeń.
iLoads.PrepareModification
iLoads.SetLoadCases
iLoads.FinishModification

Kategoria ShowHLowerThan1000 jest stosowana do śniegu poniżej wysokości 1000 m n.p.m., a kategoria ImposedCategoryA jest stosowana do obciążenia użytkowego kategorii A. Następnie przypadki obciążeń można przenieść do programu RFEM. Jednak zamiast interfejsu IModelData wykorzystywany jest interfejs ILoads, ponieważ dane modelu nie są już uwzględniane; raczej dane obciążenia.

Utworzyć kombinacje obciążeń i wyników

Podczas tworzenia kombinacji obciążeń lub wyników jest tylko kilka różnic. Wynika to z faktu, że metodę obliczeń i inne ustawienia można zastosować dopiero po utworzeniu kombinacji obciążeń za pomocą odpowiedniego interfejsu. Definicja jest przeprowadzana jak w programie RFEM. W tym celu można użyć identyfikatora LC (przypadek obciążenia). Różne separatory miejsc dziesiętnych oraz wielkie i małe litery nie odgrywają żadnej roli i oba są akceptowane:

'Tworzenie kombinacji obciążeń.
Dim loadcombs (0 To 0) As RFEM5.LoadCombination

loadcombs (0) .Ładowanie.No = 1
loadcombs (0) .ToSolve = Prawda
loadcombs (0) .Definicja = "1.35 * lc1 + 1.5 * lc2 + 1.05 * lc3"

'Kombinacje obciążeń transferowych.
iLoads.PrepareModification
iLoads.SetLoadCombinations loadcombs
iLoads.FinishModification

'Tworzenie kombinacji wyników.
Dim rescombs (0 To 0) As RFEM5.ResultCombination

rescombs (0). Load.No = 1
rescombs (0) .Definicja = "1,35 * lc1 + 0,75 * lc2 + 1,5 * lc3"

'Przenieść kombinacje wyników.
iLoads.PrepareModification
iLoads.SetResultCombination zostaje ponownie wyświetlony
iLoads.FinishModification

Tworzenie obciążeń

Jak wspomniano powyżej, obciążenia będą teraz przenoszone za pomocą interfejsów dla przypadków obciążeń. W naszym przykładzie w przypadku obciążenia 1 nie są tworzone żadne dodatkowe obciążenia; w przypadku obciążenia 2 przykładane jest obciążenie rozłożone w kształcie trapezu; a Przypadek obciążenia 3 przykłada stałe obciążenie liniowe i obciążenie węzłowe. Oto procedura dla przypadku obciążenia 2:

'Tworzenie obciążeń.
„Przypadek obciążenia 2.
Dim iLoadCase As RFEM5.iLoadCase

Ustawić iLoadCase = iLoads.GetLoadCase (2, AtNo)
Ponieważ znamy numer przypadku obciążenia, może on być używany z AtNo podczas pobierania interfejsu:
'Utworzyć obciążenia prętowe.
Dim memLoads () As RFEM5.MemberLoad
ReDim memLoads (0 To 0)

W tym przypadku tablica nie jest wymiarowana podczas inicjowania, ale później, ponieważ memLoads powinien zostać ponownie użyty dla przypadku obciążenia 3. Ma to tę zaletę, że po ponownym użyciu ReDim zawartość zostanie przywrócona do wartości domyślnych. W sekcji ObjectList można wybrać pręty do wczytania, oddzielone przecinkami lub połączone myślnikami. Oprócz wartości obciążenia zarówno na początku obciążenia (Wielkość 1), jak i na końcu obciążenia (Wielkość 2), obciążenie trapezowe wymaga określenia odległości dla początku obciążenia (Odległość A) i końca (Odległość B). Właściwość RelativeDistances określa, czy zostaną zastosowane dane bezwzględne (Fałsz) wm czy dane względne (Prawda) z zakresu 0–1:

memLoads (0). nr = 1
memLoads (0) .ObjectList = „1”
memLoads (0) .Distribution = TrapezoidalType
memLoads (0) .Magnitude1 = 6000 #
memLoads (0) .Magnitude2 = 4000 #
memLoads (0) .RelativeDistances = Fałsz
memLoads (0) .Odległość A = 0,2
memLoads (0) .Odległość B = 0,9

'Przenieść obciążenia pręta.
iLoadCase.PrepareModification
iLoadCase.SetMemberLoads memLoads
iLoadCase.FinishModification
Podczas przenoszenia obciążeń należy ustawić odpowiedni interfejs; w tym przypadku interfejs ILoadCase. Obciążenia dla przypadku obciążenia 3 są zdefiniowane w następujący sposób:
'Tworzenie obciążeń węzłowych.
Dim nodalLoads (0 To 0) As NodalLoad
nodalLoads (0) .No = 1
nodalLoads (0) .nodeList = „2”
nodalLoads (0) .Component.Force.X = -15000
nodalLoads (0) .Component.Force.Y = 0
nodalLoads (0) .Component.Force.Z = 0
nodalLoads (0) .Component.Moment.X = 0
nodalLoads (0) .Component.Moment.Y = 0
nodalLoads (0) .Component.Moment.Z = 0

Przenieść obciążenia węzłowe.
iLoadCase.PrepareModification
iLoadCase.SetNodalLoads nodalLoads
iLoadCase.FinishModification

'Utworzyć obciążenia prętowe.
ReDim memLoads (0 To 0)
memLoads (0). nr = 1
memLoads (0) .ObjectList = „1”
memLoads (0) .Distribution = UniformType
memLoads (0) .Magnitude1 = 5000 #

'Przenieść obciążenia pręta.
iLoadCase.PrepareModification
iLoadCase.SetMemberLoads memLoads
iLoadCase.FinishModification
Po zamknięciu programu procedura obsługi błędu zostaje zakończona, a licencja odblokowana:
e: If Err.Number <> 0 Więc MsgBox Err.Description,, Err.Source

'Licencja COM zostanie odblokowana, dostęp do programu jest ponownie możliwy.
iModel.GetApplication.UnlockLicense

Podsumowanie i przegląd

Procedury przedstawione w tym artykule są oparte na dwóch poprzednich artykułach. Jak już wspomniano, konstrukcja wszystkich elementów jest podobna. Wspomniany wyjątek od nieliniowych zwolnień prętów lub podpór węzłowych zostanie wyjaśniony w kolejnym artykule.


Autor

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

Po lewej
Pobrane