Dim iApp As RFEM5.AplikacjaUstawić iApp = GetObject (, „RFEM5.Aplikacja”)Następnie uruchamia się moduł obsługi błędu i licencja jest zablokowana:„Moduł obsługi błędówW 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.modelIf 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.iModelDataUstawić iModelData = iModel.GetModelData ()
'Utworzyć podpory węzłowe.Dim nodsups (0 To 1)As RFEM5.NodalSupportnodsups (0) .No = 1nodsups (0) .nodeList = „1”nodsups (0) .RestraintConstantX = -1nodsups (0) .RestraintConstantY = 0 #nodsups (0) .RestraintConstantZ = -1nodsups (0) .SupportConstantX = -1nodsups (0) .SupportConstantY = -1nodsups (0) .SupportConstantZ = -1
nodsups (1). nr = 2nodsups (1) .nodeList = „2”nodsups (1) .RestraintConstantX = -1nodsups (1) .RestraintConstantY = 0 #nodsups (1) .RestraintConstantZ = -1nodsups (1) .SupportConstantX = 0 #nodsups (1) .SupportConstantY = -1nodsups (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.PrepareModificationiModelData.SetNodalSupports nodsupsiModelData.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.iLoadsUstawić iLoads = iModel.GetLoads
'Utworzyć przypadki obciążeń.Dim przypadki obciążeń (0 To 2) As RFEM5.LoadCase
skrzynie obciążeń (0). obciążenie nie = 1loadcases (0) .SelfWeight = Prawdaloadcases (0) .ToSolve = Prawdaloadcases (0) .SelfWeightFactor.X = 0loadcases (0) .SelfWeightFactor.Y = 0loadcases (0) .SelfWeightFactor.Z = 1loadcases (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 = 2loadcases (1) .SelfWeight = Fałszloadcases (1) .ToSolve = Prawdaloadcases (1) .ActionCategory = ShowHLowerThan1000
skrzynie obciążeń (2). obciążenie nie = 3loadcases (2) .SelfWeight = Fałszloadcases (2) .ToSolve = Prawdaloadcases (2) .ActionCategory = ImposedCategoryA
'Przenieść przypadki obciążeń.iLoads.PrepareModificationiLoads.SetLoadCasesiLoads.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 = 1loadcombs (0) .ToSolve = Prawdaloadcombs (0) .Definicja = "1.35 * lc1 + 1.5 * lc2 + 1.05 * lc3"
'Kombinacje obciążeń transferowych.iLoads.PrepareModificationiLoads.SetLoadCombinations loadcombsiLoads.FinishModification
'Tworzenie kombinacji wyników.Dim rescombs (0 To 0) As RFEM5.ResultCombination
rescombs (0). Load.No = 1rescombs (0) .Definicja = "1,35 * lc1 + 0,75 * lc2 + 1,5 * lc3"
'Przenieść kombinacje wyników.iLoads.PrepareModificationiLoads.SetResultCombination zostaje ponownie wyświetlonyiLoads.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.iLoadCaseUstawić 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.MemberLoadReDim 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 = 1memLoads (0) .ObjectList = „1”memLoads (0) .Distribution = TrapezoidalTypememLoads (0) .Magnitude1 = 6000 #memLoads (0) .Magnitude2 = 4000 #memLoads (0) .RelativeDistances = FałszmemLoads (0) .Odległość A = 0,2memLoads (0) .Odległość B = 0,9
'Przenieść obciążenia pręta.iLoadCase.PrepareModificationiLoadCase.SetMemberLoads memLoadsiLoadCase.FinishModificationPodczas 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 NodalLoadnodalLoads (0) .No = 1nodalLoads (0) .nodeList = „2”nodalLoads (0) .Component.Force.X = -15000nodalLoads (0) .Component.Force.Y = 0nodalLoads (0) .Component.Force.Z = 0nodalLoads (0) .Component.Moment.X = 0nodalLoads (0) .Component.Moment.Y = 0nodalLoads (0) .Component.Moment.Z = 0
Przenieść obciążenia węzłowe.iLoadCase.PrepareModificationiLoadCase.SetNodalLoads nodalLoadsiLoadCase.FinishModification
'Utworzyć obciążenia prętowe.ReDim memLoads (0 To 0)memLoads (0). nr = 1memLoads (0) .ObjectList = „1”memLoads (0) .Distribution = UniformTypememLoads (0) .Magnitude1 = 5000 #
'Przenieść obciążenia pręta.iLoadCase.PrepareModificationiLoadCase.SetMemberLoads memLoadsiLoadCase.FinishModificationPo 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.