1737x
001408
02.03.2017

Interface COM en VBA | 2.2 Création d'une barre


Dim iApp As RFEM5.Application
Set iApp = GetObject(, "RFEM5.Application")
Ensuite, le gestionnaire d'erreurs est démarré et la licence est verrouillée :
' Gestionnaire d'erreurs
On 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.model
If 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.iModelData
Set iModelData = iModel.GetModelData()

' Créer des appuis nodaux.
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).No = 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

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.PrepareModification
iModelData.SetNodalSupports nodsups
iModelData.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.iLoads
Set iLoads = iModel.GetLoads

' Créer des cas de charge.
Dim loadcases(0 To 2) As RFEM5.LoadCase

loadcases(0).Loading.No = 1
loadcases(0).SelfWeight = True
loadcases(0).ToSolve = True
loadcases(0).SelfWeightFactor.X = 0
loadcases(0).SelfWeightFactor.Y = 0
loadcases(0).SelfWeightFactor.Z = 1
loadcases(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 = 2
loadcases(1).SelfWeight = False
loadcases(1).ToSolve = True
loadcases(1).ActionCategory = ShowHLowerThan1000

loadcases(2).Loading.No = 3
loadcases(2).SelfWeight = False
loadcases(2).ToSolve = True
loadcases(2).ActionCategory = ImposedCategoryA

' Transférer des cas de charge.
iLoads.PrepareModification
iLoads.SetLoadCases loadcases
iLoads.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 = 1
loadcombs(0).ToSolve = True
loadcombs(0).Definition = "1.35*lc1 + 1.5*lc2 + 1.05*lc3"

' Transférer des combinaisons de charges.
iLoads.PrepareModification
iLoads.SetLoadCombinations loadcombs
iLoads.FinishModification

' Créer des combinaisons de résultats.
Dim rescombs(0 To 0) As RFEM5.ResultCombination

rescombs(0).Loading.No = 1
rescombs(0).Definition = "1.35*lc1 + 0.75*lc2 + 1.5*lc3"

' Transférer des combinaisons de résultats.
iLoads.PrepareModification
iLoads.SetResultCombinations rescombs
iLoads.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.iLoadCase

Set 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.MemberLoad
ReDim 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 = 1
memLoads(0).ObjectList = "1"
memLoads(0).Distribution = TrapezoidalType
memLoads(0).Magnitude1 = 6000#
memLoads(0).Magnitude2 = 4000#
memLoads(0).RelativeDistances = False
memLoads(0).DistanceA = 0.2
memLoads(0).DistanceB = 0.9

' Transférer des charges de barre.
iLoadCase.PrepareModification
iLoadCase.SetMemberLoads memLoads
iLoadCase.FinishModification
Lors 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 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

' Transférer des charges nodales.
iLoadCase.PrepareModification
iLoadCase.SetNodalLoads nodalLoads
iLoadCase.FinishModification

' Créer des charges de barre.
ReDim memLoads(0 To 0)
memLoads(0).No = 1
memLoads(0).ObjectList = "1"
memLoads(0).Distribution = UniformType
memLoads(0).Magnitude1 = 5000#

' Transférer des charges de barre.
iLoadCase.PrepareModification
iLoadCase.SetMemberLoads memLoads
iLoadCase.FinishModification
Lorsque 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.


Auteur

M. Günthel fournit une assistance technique aux clients de Dlubal Software.

Liens
Téléchargements