Dim iApp As RFEM5.ApplicationSet iApp = GetObject(, "RFEM5.Application")Ensuite, le gestionnaire d'erreurs est démarré et la licence est verrouillée :' Gestionnaire d'erreursOn Error GoTo e' La licence COM et l'accès au programme sont bloqués.iApp.LockLicense
Nous vous recommandons de démarrer le gestionnaire avant de verrouiller la licence. Autrement, RFEM reste verrouillé en cas d'erreur et ne peut être fermé qu'à l'aide du Gestionnaire des tâches. Étant donné que l'interface est maintenant prête à être appliquée, vous pouvez obtenir l'interface correspondant au modèle :
' Obtenir l'interface du premier modèle.Dim iModel As RFEM5.modelIf iApp.GetModelCount > 0 Then Set iModel = iApp.GetModel(0)Else Err.Raise vbObjectError, "LoadModel()","iApp.GetModelCount < 1"End If
Pour une meilleure gestion des erreurs, vous pouvez vérifier si le modèle est effectivement disponible (GetModelCount, dans ce cas) avant de récupérer le modèle. Même dans le cas d'autres interfaces, telles que l'interface pour les cas de charge ou les charges, vous pouvez indiquer les erreurs d'une meilleure manière.
Créer des appuis nodaux
Une poutre à travée simple doit être créée et, comme la barre est le long de l'axe x, la translation x, y, z et la rotation autour des axes x et z doivent également être verrouillées sur le nœud 1. L'appui sur le nœud 2 est similaire au premier jusqu'à la translation libre dans la direction x. Avant de créer les appuis nodaux, il est nécessaire de récupérer l'interface pour les données du modèle. Lorsque vous définissez l'appui, vous devez vous assurer que, dans le cas de degrés de liberté, un nombre supérieur ou égal à 0 est égalisé avec la libération à l'aide d'une constante de ressort. Ici, les unités SI sont également utilisées ; c'est-à-dire N/m ou N/rad :
' Obtenir l'interface pour les données de modèle.Dim iModelData As RFEM5.iModelDataSet iModelData = iModel.GetModelData()
' Créer des appuis nodaux.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).No = 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
Si des problèmes surviennent, c'est peut-être à cause d'un type de données incorrect. Si double est requis, l'entrée des nombres entiers peut causer des erreurs. Il est donc nécessaire d'ajouter un dièse après la valeur entière afin de l'utiliser comme valeur double.
Bien sûr, l'appui nodal doit être à nouveau transféré en mode de modification (PrepareModification/FinishModification) :
' Transférer les appuis nodaux.iModelData.PrepareModificationiModelData.SetNodalSupports nodsupsiModelData.FinishModification
Créer des cas de charge
Pour créer des charges, vous devez d'abord définir des cas de charge, exactement comme dans RFEM. Lors de la programmation, les cas de charge sont d'abord créés et transférés, puis les charges peuvent être transférées à l'aide des interfaces des cas de charge. D'abord, nous créons les cas de charge :
' Obtenir l'interface pour les charges.Dim iLoads As RFEM5.iLoadsSet iLoads = iModel.GetLoads
' Créer des cas de charge.Dim loadcases(0 To 2) As RFEM5.LoadCase
loadcases(0).Loading.No = 1loadcases(0).SelfWeight = Trueloadcases(0).ToSolve = Trueloadcases(0).SelfWeightFactor.X = 0loadcases(0).SelfWeightFactor.Y = 0loadcases(0).SelfWeightFactor.Z = 1loadcases(0).ActionCategory = Permanent
Trois cas de charge doivent être créés : le poids propre, la neige et la charge imposée. Dans la programmation COM, tous les identificateurs sont en anglais. Ainsi, Permanent est utilisé pour ActionCategory dans le cas du poids propre. Pour la propriété SelfWeightFactor, vous pouvez définir la direction et la valeur du poids propre. Cependant, celles-ci ne s'appliquent que si la propriété de poids propre est définie sur True. De plus, ToSolve doit également être défini sur True pour pouvoir inclure le cas de charge dans le calcul et assigner un numéro au cas de charge (.Loading.No). Les deux autres cas de charge sont définis plus facilement car il n'y a pas de poids propre :
loadcases(1).Loading.No = 2loadcases(1).SelfWeight = Falseloadcases(1).ToSolve = Trueloadcases(1).ActionCategory = ShowHLowerThan1000
loadcases(2).Loading.No = 3loadcases(2).SelfWeight = Falseloadcases(2).ToSolve = Trueloadcases(2).ActionCategory = ImposedCategoryA
' Transférer des cas de charge.iLoads.PrepareModificationiLoads.SetLoadCases loadcasesiLoads.FinishModification
La catégorie ShowHLowerThan1000 est utilisée pour la neige à une altitude inférieure à 1 000 m au-dessus du niveau de la mer et la catégorie ImposedCategoryA est utilisée pour la charge imposée de la catégorie A. Les cas de charge peuvent ensuite être transférés vers RFEM. Cependant, l'interface ILoads est utilisée pour cela au lieu de l'interface IModelData, car les données du modèle ne sont plus concernées. Ce sont plutôt les données de charge qui le sont.
Créer des combinaisons de charges et de résultats
Lorsque vous créez des combinaisons de charges ou de résultats, il y a peu de différences. La méthode de calcul et d'autres paramètres ne peuvent être appliqués qu'après la création de la combinaison de charges via l'interface correspondante. La définition est effectuée comme dans RFEM. Pour cela, vous pouvez utiliser l'identifiant CC (Cas de charge). Les différents séparateurs décimaux et les lettres majuscules et minuscules ne jouent aucun rôle et sont tous deux acceptés :
' Créer des combinaisons de charges.Dim loadcombs(0 To 0) As RFEM5.LoadCombination
loadcombs(0).Loading.No = 1loadcombs(0).ToSolve = Trueloadcombs(0).Definition = "1.35*lc1 + 1.5*lc2 + 1.05*lc3"
' Transférer des combinaisons de charges.iLoads.PrepareModificationiLoads.SetLoadCombinations loadcombsiLoads.FinishModification
' Créer des combinaisons de résultats.Dim rescombs(0 To 0) As RFEM5.ResultCombination
rescombs(0).Loading.No = 1rescombs(0).Definition = "1.35*lc1 + 0.75*lc2 + 1.5*lc3"
' Transférer des combinaisons de résultats.iLoads.PrepareModificationiLoads.SetResultCombinations rescombsiLoads.FinishModification
Création de charges
Comme mentionné précédemment, les charges seront désormais transférées via les interfaces pour les cas de charge. Dans notre exemple, aucune charge supplémentaire n'est créée dans le cas de charge 1. Dans le cas de charge 2, une charge distribuée trapézoïdale est appliquée. Enfin, le cas de charge 3 applique une charge linéaire constante et une charge nodale. Voici la procédure à suivre pour le cas de charge 2 :
' Créer des charges.
' Cas de charge 2.
Dim iLoadCase As RFEM5.iLoadCaseSet iLoadCase = iLoads.GetLoadCase(2, AtNo)Comme nous connaissons le numéro de cas de charge, il peut être utilisé avec AtNo lors de la récupération de l'interface :' Créer des charges de barre.Dim memLoads() As RFEM5.MemberLoadReDim memLoads(0 To 0)
Dans ce cas, le tableau n'est pas dimensionné à l'initialisation, mais par la suite, car memLoads doit être réutilisé pour le cas de charge 3. L'avantage est que le contenu est réinitialisé sur ses valeurs par défaut lors de la réutilisation de ReDim. Sous ObjectList, vous pouvez sélectionner les barres à charger, séparées par des virgules ou reliées par des tirets. En plus des valeurs de charge pour le début de charge (Magnitude1) et la fin de charge (Magnitude2), la charge trapézoïdale nécessite la spécification des distances pour le début de charge (DistanceA) et la fin (DistanceB). La propriété RelativeDistances détermine si les données absolues (False) en m ou relatives (True) de 0-1 sont utilisées :
memLoads(0).No = 1memLoads(0).ObjectList = "1"memLoads(0).Distribution = TrapezoidalTypememLoads(0).Magnitude1 = 6000#memLoads(0).Magnitude2 = 4000#memLoads(0).RelativeDistances = FalsememLoads(0).DistanceA = 0.2memLoads(0).DistanceB = 0.9
' Transférer des charges de barre.iLoadCase.PrepareModificationiLoadCase.SetMemberLoads memLoadsiLoadCase.FinishModificationLors du transfert des charges, l'interface correcte doit être définie. Dans ce cas, celle-ci doit être l'interface ILoadCase. Les charges du cas de charge 3 sont définies de la même manière :' Créer des charges nodales.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
' Transférer des charges nodales.iLoadCase.PrepareModificationiLoadCase.SetNodalLoads nodalLoadsiLoadCase.FinishModification
' Créer des charges de barre.ReDim memLoads(0 To 0)memLoads(0).No = 1memLoads(0).ObjectList = "1"memLoads(0).Distribution = UniformTypememLoads(0).Magnitude1 = 5000#
' Transférer des charges de barre.iLoadCase.PrepareModificationiLoadCase.SetMemberLoads memLoadsiLoadCase.FinishModificationLorsque vous fermez le programme, la routine du gestionnaire d'erreurs est terminée et la licence est déverrouillée :e: If Err.Number <> 0 Then MsgBox Err.Description, , Err.Source
' La licence COM est déverrouillée, l'accès au programme est à nouveau possible.iModel.GetApplication.UnlockLicense
Résumé et aperçu
Les procédures décrites dans cet article sont basées sur les deux articles précédents. Comme déjà mentionné, la structure est similaire dans tous les éléments. L'exception mentionnée des libérations de barre non linéaires ou des appuis nodaux sera expliquée dans le prochain article.