Dim iAppAs RFEM5.ApplicationSet iApp = GetObject (, "RFEM5.Application")Poté se spustí popisovač chyb a licence se zamkne:'Zpracování chybOn Error GoTo e'COM licence a přístup k programům jsou uzamčeny.iApp.LockLicense
Před zamknutím licence doporučujeme spustit obslužnou rutinu; v opačném případě zůstane program RFEM v případě chyby uzamčený a lze ho ukončit pouze pomocí Správce úloh. Protože rozhraní je nyní připraveno k použití, můžete získat rozhraní pro model:
'Získat rozhraní pro první model.Dim iModelAs RFEM5.modelIf iApp.GetModelCount> 0 Then Set iModel = iApp.GetModel (0)Else Err.Raise vbObjectError, "LoadModel ()","iApp.GetModelCount <1"End If
Pro lepší zpracování chyb můžete před načtením modelu zkontrolovat, zda je model skutečně k dispozici (v tomto případě GetModelCount). I v případě jiných rozhraní, jako je rozhraní pro zatěžovací stavy nebo zatížení, lze chyby lépe označit.
Vytvoření uzlové podpory
Měl by být vytvořen nosník o jednom poli a protože je prut podél osy x, je třeba na uzlu 1 zablokovat také posun x, y, z a natočení okolo osy x a z. Podpora v uzlu 2 je stejná jako u prvního až po volný překlad ve směru x. Před vytvořením uzlových podpor je třeba ještě načíst rozhraní pro data modelu. Při definování podpory je třeba se ujistit, že v případě stupňů volnosti se pomocí pružinové konstanty vyrovná číslo větší než nebo rovno 0 s uvolněním. Zde se také používají jednotky SI; tj. N/m nebo N/rad:
'Získat rozhraní pro data modelu.Dim iModelData As RFEM5.iModelDataSet iModelData = iModel.GetModelData ()
'Vytvořit uzlové podpory.Dim nodsups (0 Komu 1)As RFEM5.NodalSupportnodsups (0) .No = 1nodsups (0) .nodeList = "1"nodsups (0) .RestraintConstantX = -1nodsups (0) .RestraintConstantY = 0 #nodsups (0) .RozpočetConstantZ = -1nodsups (0) .PodporaConstantX = -1nodsups (0) .PodporaConstantY = -1nodsups (0) .PodporaConstantZ = -1
nodsups (1) .No = 2nodsups (1) .nodeList = "2"nodsups (1) .RestraintConstantX = -1nodsups (1) .RestraintConstantY = 0 #nodsups (1) .RestraintConstantZ = -1nodsups (1) .PodporaConstantX = 0 #nodsups (1) .PodporaConstantY = -1nodsups (1) .PodporaConstantZ = -1
Pokud se vyskytnou problémy, mohou být způsobeny nesprávným typem dat. Pokud je třeba zdvojnásobit, může způsobit celé číslo chyby. Proto je třeba za celočíselnou hodnotu přidat hash klíč, aby byl použit jako dvojitá hodnota.
Uzlovou podporu je pak samozřejmě třeba znovu převést do režimu úprav (PrepareModification/FinishModification):
'Přenést uzlové podpory.iModelData.PrepareModificationiModelData.SetNodalSupports nodsupsiModelData.FinishModification
Vytvoření zatěžovacího stavu
Pro vytvoření zatížení je třeba nejdříve definovat zatěžovací stavy, přesně jako v programu RFEM. Při programování se nejdříve vytvoří a přenese zatěžovací stav a teprve poté lze přenášet zatížení pomocí rozhraní zatěžovacích stavů. Nejdříve vytvoříme zatěžovací stavy:
'Získat rozhraní pro zatížení.Dim iLoads As RFEM5.iLoadsSet iLoads = iModel.GetLoads
'Vytvořit zatěžovací stavy.Dim zatěžovací stavy (0 Komu 2)As RFEM5.LoadCase
zatěžovací stavy (0). Načítání.No = 1zatěžovací stavy (0) .SelfWeight = Truezatěžovací stavy (0) .ToSolve = Truezatěžovací stavy (0) .SelfWeightFactor.X = 0zatěžovací stavy (0) .SelfWeightFactor.Y = 0zatěžovací stavy (0) .SelfWeightFactor.Z = 1zatěžovací stavy (0) .ActionCategory = Trvalé
Je třeba vytvořit tři zatěžovací stavy: vlastní tíha, sníh a vynucené zatížení. V programování COM jsou všechny identifikátory v angličtině. Proto se v případě zatěžovacího stavu s vlastní tíhou používá pro funkci ActionCategory. Pro vlastnost SelfWeightFactor lze nastavit směr a hodnotu vlastní tíhy. Platí ovšem pouze tehdy, pokud je vlastnost vlastní tíhy nastavena na hodnotu TRUE. Kromě toho musí být funkce ToSolve také nastaveno na hodnotu TRUE, aby se zatěžovací stav mohl zahrnout do výpočtu a aby se zatěžovacímu případu přiřadilo číslo (.Loading.No). Další dva zatěžovací stavy se zadávají snadněji, protože neexistuje vlastní tíha:
zatěžovací stavy (1). Načítání.No = 2zatěžovací stavy (1) .SelfWeight = Nepravdazatěžovací stavy (1) .ToSolve = Truezatěžovací stavy (1) .ActionCategory = ZobrazitHLowerThan1000
zatěžovací stavy (2). Načítání.No = 3zatěžovací stavy (2) .SelfWeight = Nepravdazatěžovací stavy (2) .ToSolve = Truezatěžovací stavy (2) .ActionCategory = ImposedCategoryA
'Převzít zatěžovací stavy.iLoads.PrepareModificationZatěžovací stavy iLoads.SetLoadCasesiLoads.FinishModification
Kategorie ShowHLowerThan1000 se používá pro sníh pod nadmořskou výškou 1 000 m a kategorie ImposedCategoryA pro užitné zatížení kategorie A. Poté lze zatěžovací stavy převést do programu RFEM. Místo toho však používá rozhraní ILoads místo rozhraní IModelData, protože se již nejedná o data modelu; spíše údaje o zatížení.
Vytvořit kombinace zatížení a výsledků
Při vytváření kombinací zatížení nebo kombinací výsledků existuje jen několik rozdílů. Důvodem je, že metodu výpočtu a další nastavení lze použít až po vytvoření kombinace zatížení pomocí příslušného rozhraní. Definice probíhá jako v programu RFEM. K tomu lze použít identifikátor ZS (zatěžovací stav). Různé oddělovače desetinných míst a velká a malá písmena nehrají žádnou roli a jsou akceptovány:
'Vytvořit kombinace zatížení.Dim zatěžovací stavy (0 Komu 0) As RFEM5.LoadCombination
loadcombs (0) .Loading.No = 1loadcombs (0) .ToSolve = Trueloadcombs (0) .Definice = "1.35 * lc1 + 1.5 * lc2 + 1.05 * lc3"
'Převzít kombinace zatížení.iLoads.PrepareModificationiLoads.SetLoadKombinace zatíženíiLoads.FinishModification
'Vytvořit kombinace výsledků.Dim rescombs (0 Komu 0) As RFEM5.ResultCombination
rescombs (0) .Loading.No = 1rescombs (0) .Definice = "1.35 * lc1 + 0.75 * lc2 + 1.5 * lc3"
'Převzít kombinace výsledků.iLoads.PrepareModificationiLoads.SetResultCombinations se zobrazíiLoads.FinishModification
Vytvoření zatížení
Jak jsme již zmínili výše, zatížení se nyní převedou pomocí rozhraní pro zatěžovací stavy. V našem příkladu se v zatěžovacím stavu 1 nevytvoří žádná další zatížení; v zatěžovacím stavu 2 se použije lichoběžníkové rozložené zatížení; a Zatěžovací stav 3 aplikuje konstantní lineární zatížení a uzlové zatížení. Pro zatěžovací stav 2 je postup:
'Vytvořit zatížení.
'Zatěžovací stav 2.
Dim iLoadCase As RFEM5.iLoadCaseSet iLoadCase = iLoads.GetLoadCase (2, AtNo)Vzhledem k tomu, že čísla zatěžovacích stavů známe, můžeme je použít v AtNo při načítání rozhraní:'Vytvořit zatížení na pruty.Dim memLoads () As RFEM5.MemberLoadReDim memLoads (0 Komu 0)
V tomto případě není pole dimenzováno při inicializaci, ale následně, protože by měl být memLoads znovu použit pro zatěžovací stav 3. Výhodou je, že při opětovném použití ReDimu se obsah nastaví na standardní hodnoty. V sekci ObjectList je možné vybrat pruty, které se mají načíst, oddělené čárkami nebo spojené spojovníkem. Kromě obou hodnot zatížení pro počátku zatížení (velikost1) a pro konec zatížení (velikost2) vyžaduje lichoběžníkové zatížení také specifikace vzdáleností pro počátek zatížení (vzdálenost A) a konec (vzdálenost B). Vlastnost RelativeDistance určuje, zda se mají použít absolutní (falešná) data v m nebo relativní (pravda) data 0-1:
memLoads (0) .No = 1memLoads (0) .ObjectList = "1"memLoads (0) .Distribuce = Trapézový typmemLoads (0) .Magnitude1 = 6000 #memLoads (0) .Magnitude2 = 4000 #memLoads (0) .RelativeDistance = NepravdamemLoads (0) .DacenceA = 0,2memLoads (0) .DistenceB = 0,9
'Přenést zatížení na pruty.iLoadCase.PrepareModificationiLoadCase.SetMemberLoads memLoadsiLoadCase.FinishModificationPři přenosu zatížení je třeba nastavit správné rozhraní; v tomto případě rozhraní ILoadCase. Zatížení zatěžovacího stavu 3 se definují následovně:'Vytvořit uzlová zatížení.Dim nodalLoads (0 Komu 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
'Převzít uzlová zatížení.iLoadCase.PrepareModificationiLoadCase.SetNodalLoads nodalLoadsiLoadCase.FinishModification
'Vytvořit zatížení na pruty.ReDim memLoads (0 Komu 0)memLoads (0) .No = 1memLoads (0) .ObjectList = "1"memLoads (0) .Distribution = UniformTypememLoads (0) .Magnitude1 = 5000 #
'Přenést zatížení na pruty.iLoadCase.PrepareModificationiLoadCase.SetMemberLoads memLoadsiLoadCase.FinishModificationPři ukončení programu se rutina zpracování chyb dokončí a licence se odemkne:e: If Err.Number <> 0Then MsgBox Err.Description, , Err.Source
„Licence COM je odemčena, přístup k programu je opět možný.iModel.GetApplication.UnlockLicense
Shrnutí a výhled
Postupy uvedené v tomto článku vycházejí z obou předchozích příspěvků. Jak jsme již zmínili, konstrukce je u všech prvků podobná. Uvedenou výjimku z nelineárních uvolnění prutů nebo uzlových podpor uvedeme v dalším příspěvku.