Interface COM en VBA | 2.2 Créer une barre

Article technique

La partie 2.1 de cette série d’articles à propos de l’interface COM a décrit la création et la modification d’éléments sur un exemple de barre. Dans cette troisième partie, ces éléments de base sont utilisés à nouveau pour créer des appuis nodaux, charges ou combinaisons de charge et des combinaisons de résultat. Ainsi, nous travaillons sur le modèle créé dans la deuxième partie. Les éléments expliqués dans les Partie 1 et Partie 2.1 ne sont pas décrits ci-dessous.

Figure 01 – Système

Obtenir l’interface du modèle ouvert

Contrairement aux deux derniers articles, nous chargeons ici un modèle déjà ouvert dans RFEM. Dans cet exemple, le modèle du deuxième article est ouvert. Tout d’abord, l’interface pour l’application ouverte et récupérée :

' Interface avec RFEM est récupérée.
Dim iApp As RFEM5.Application
Set iApp = GetObject(, "RFEM5.Application")

Puis le gestionnaire d’erreur est démarré et la licence est bloquée:

' Gestionnaire d'erreurs
On Error GoTo e

' Licence COM et accès au programme bloqués.
iApp.LockLicense

Nous recommandons de démarrer le gestionnaire avant de bloquer la licence, autrement RFEM reste bloqué en cas d’erreur et ne peut être fermé qu’à travers le Gestionnaire des tâches. L’interface est maintenant prête à être utilisée, vous pouvez obtenir l’interface pour le modèle :

' Interface pour le 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 contrôler si le modèle est déjà disponible (GetModelCount dans ce cas) avant de récupérer le modèle. Même dans le cas d’autres interfaces, par exemple l’interface pour les cas de charge et les charges, vous pouvez indiquer les erreurs de manière plus efficace.

Création des appuis nodaux

Une poutre à travée unique doit être créée et la barre étant le long de l’axe x, la translation x, y, z et la rotation autour de l’axe x et z doivent également être bloquées sur le nœud 1. L’appui sur le nœud 2 est similaire au premier, hormis la translation libre dans la direction x. Avant de créer les appuis nodaux, il est encore nécessaire de récupérer l’interface pour les données de modèle. Lors de la définition de l’appui, assurez-vous que si des degrés de liberté existent, leur nombre nul ou positif est égalé avec la libération à l’aide d’une constante de ressort. Ci-dessous des unités SI sont également utilisées, N/m ou N/rad :

' Interface pour les données de modèle.
Dim iModelData As RFEM5.iModelData
Set iModelData = iModel.GetModelData()

' Création 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 ont lieu, ils peuvent avoir été causés par un mauvais type de données. Si un double des données est nécessaire, une entrée de nombre entier peut provoquer des erreurs. Ainsi, il est nécessaire d’ajouter un croisillon après la valeur entière, de sorte qu’elle soit utilisée comme une valeur double.

Bien évidemment, l’appui nodal doit alors être transféré vers le mode édition à nouveau (PrepareModification / FinishModification):

' Transfert des appuis nodaux.
iModelData.PrepareModification
iModelData.SetNodalSupports nodsups
iModelData.FinishModification

Créer des cas de charge

Pour créer des charges, il faut d’abord définir les cas de charge, tout comme dans RFEM. Lors de la programmation, les cas de charge sont d’abord créés et transférés. Ce n’est qu’après que les charges peuvent être transférées via les interfaces des cas de charge.

Nous créons d’abord les cas de charge :

' Interface pour les charges.
Dim iLoads As RFEM5.iLoads
Set iLoads = iModel.GetLoads

' Création 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 sont à créer : pour le poids propre, la neige et la charge imposée. Dans la programmation COM, tous les identifiants sont en anglais. Ainsi, Permanent est utilisé pour ActionCategory du cas de charge pour le poids propre. Pour la propriété SelfWeightFactor, vous pouvez définir la direction et la valeur du poids propre. Toutefois, ceux-ci ne sont applicables que si la propriété poids propre est définie comme True.

De plus, ToSolve doit être défini comme True pour inclure le cas de charge dans le calcul et pour 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

' Transfert des cas de charge.
iLoads.PrepareModification
iLoads.SetLoadCases loadcases
iLoads.FinishModification

La catégorie ShowHLowerThan1000 est utilisée pour la neige sous une altitude de 1 000 m au-dessus du niveau de la mer et ImposedCategoryA est utilisée pour la charge imposée de Category A. Les cas de charge peuvent ensuite être transférés dans RFEM. Toutefois l’interface ILoads est utilisée au lieu de l’interface IModelData car les données de modèle ne sont plus concernées, les données de charge le sont.

Créer les combinaisons de charge et de résultat

Il n’y a que très peu de différences dans la création de combinaisons de charge ou de résultat. Ceci s’explique par le fait que 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 charge via l’interface correspondante. La définition est réalisée comme dans RFEM. Utilisez l’identifiant LC (Cas de charge). Les différents séparateurs décimaux et les lettres minuscules et majuscules n’ont pas d’effet et sont également acceptées.

' Création de la combinaison de charge.
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"

' Transfert de la combinaison de charge.
iLoads.PrepareModification
iLoads.SetLoadCombinations loadcombs
iLoads.FinishModification

' Création des combinaisons de charge.
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"

' Transfert des combinaisons de résultat.
iLoads.PrepareModification
iLoads.SetResultCombinations rescombs
iLoads.FinishModification

Créer les charges

Comme précisé au-dessus, les charges seront maintenant transférées à l’aide des interfaces pour les cas de charge. Dans notre exemple, toutes les charges additionnelles sont créées dans le Cas de charge 1. Dans le cas de charge 2, une chargé distribuée trapézoïdale est appliquée. Le Cas de charge 3 applique une charge linéaire constante et une charge nodale. Création du cas de charge 2 :

' Création des charges.
' Cas de charge 2.
Dim iLoadCase As RFEM5.iLoadCase
Set iLoadCase = iLoads.GetLoadCase(2, AtNo)

Nous connaissons ce numéro de cas de charge, utilisons le avec AtNo lors de la récupération de l’interface:

' Création des charges de barre.
Dim memLoads() As RFEM5.MemberLoad
ReDim memLoads(0 To 0)

Dans ce cas le tableau n’est pas calculé à l’initialisation, mais après car memLoads doit être utilisé à nouveau pour le Cas de charge 3. L’avantage est que le contenu est réinitialisé aux valeurs par défaut lorsque vous utilisé ReDim à nouveau. Sous ObjectList, vous pouvez sélectionner les barres, vous pouvez sélectionner les barres pour le chargement, séparées par des virgules ou connectées par des tirets. En plus des deux valeurs de charge pour la charge de début (Magnitude1) et la charge de fin (Magnitude2), la charge trapézoïdale requiert l’entrée de distance pour la charge de début (DistanceA) et de fin (DistanceB). La propriété RelativeDistances détermine si des données absolument (False) ou relativement (True) fausses de 0-1 seront 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

' Transfert des charges de barre.
iLoadCase.PrepareModification
iLoadCase.SetMemberLoads memLoads
iLoadCase.FinishModification

Lorsque vous transferrez les charges, la bonne interface doit être définie, dans le cas de l’interface ILoadCase. Les charges du Cas de charge 3 sont définies de manière similaire comme suit :

' Création 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

' Transfert des charges nodales.
iLoadCase.PrepareModification
iLoadCase.SetNodalLoads nodalLoads
iLoadCase.FinishModification

' Création 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#

' Transfert des charges de barre.
iLoadCase.PrepareModification
iLoadCase.SetMemberLoads memLoads
iLoadCase.FinishModification

Lors de la fermeture du programme, la routine du gestionnaire d’erreur est complète et la licence est débloquée :

e: If Err.Number <> 0 Then MsgBox Err.Description, , Err.Source

' Licence COM débloquée, l'accès au programme est à nouveau possible.
iModel.GetApplication.UnlockLicense

Résumé et aperçu

Les procédures démontrées dans l’article sont basées sur les deux articles précédents. Comme mentionné précédemment, la structure est similaire pour tous les éléments. L’exception citée, les libérations de barre non-linéaires ou les appuis nodaux non-linéaires sont expliquées dans le prochain article de la série.

Téléchargements

Liens

Contactez-nous

Contactez-nous

Vous avez des questions relatives à nos produits ? Vous avez besoin de conseils pour votre projet en cours ? Contactez-nous ou visitez notre FAQ, vous y trouverez de nombreuses astuces et solutions.

+33 1 78 42 91 61

info@dlubal.fr

RFEM Logiciel principal
RFEM 5.xx

Programme de base

Logiciel de calcul de structures aux éléments finis (MEF) pour les structures 2D et 3D composées de plaques, voiles, coques, barres (poutres), solides et éléments d'assemblage

Prix de la première licence
3 540,00 USD