Interface COM en VBA | 4.1 Optimisation de portique

Article technique

Les parties 4.1 et 4.2 de cette série d'articles décrivent l'optimisation d'un portique à l'aide du module additionnel RF‑/STEEL EC3. La cinquième partie de cette série explique comment faire le lien avec ce module et sélectionner les barres adéquates. Les éléments évoqués dans les parties précédentes ne sont plus détaillés.

Figure 01 - Système

Filtrer de sorte à conserver uniquement les barres nécessaires

L'objectif est de transférer uniquement les barres avec une même section pour la vérification dans RF‑/STEEL EC3. Dans l'exemple suivant, toutes les barres avec une section de type IPE 300 doivent être filtrées. Pour ce faire, il faut sélectionner toutes les sections du programme de base :

' Créer la chaîne de la section voulue
Dim crsc_desc As String
crsc_desc = "IPE 300"

' Obtenir toutes les sections de RFEM
Dim crscs() As RFEM5.CrossSection
crscs = iModelData.GetCrossSections

' Créer une boucle incluant toutes les sections
Dim crsc_no As Long
crsc_no = -1
DimAs Long
For i = 0 To UBound(crscs, 1)
 ' Si la description de section est correcte, enregistrer le numéro de section
 If InStr(LCase(crscs(i).Description), LCase(crsc_desc)) > 0 Then
  crsc_no = crscs(i).No
  Exit For
 End If
Next i

' Fermer le programme si la section souhaitée n'a pas été trouvée
If crsc_no = -1 Then
 Err.Raise 513, "Get cross-section number", "No cross-section with "" " & crsc_desc & " "" within its description found!"
End If

La description de la section doit être synchronisée autant que possible. La description de la section et la chaîne à rechercher doivent d'abord être paramétrées en lettres minuscules via « LCase ». Il faut ensuite rechercher la chaîne appropriée dans la description de la section. En l'absence de section correspondante, le numéro de la section reste −1. Ce numéro peut ainsi être interrogé et quitté après rejet.

Après cette étape, le numéro de la section est connu et il est possible de rechercher les barres présentant ce numéro de section. Seule la barre présentant cette section en début et en fin de barre doit être conservée :

' Créer une chaîne pour la liste de barres et la paramétrer sur zéro
Dim mems_str As String
mems_str = vbanullstr

' Obtenir toutes les barres de RFEM
Dim mems() As RFEM5.Member
mems = iModelData.GetMembers

' Créer une boucle incluant toutes les barres
For i = 0 To UBound(mems, 1)
 ' Si une barre présente un numéro de section au début et à la fin,
 ' utiliser ce numéro dans la chaîne
 If mems(i).EndCrossSectionNo = crsc_no Then
  If mems(i).EndCrossSectionNo = mems(i).StartCrossSectionNo Then
   mems_str = mems_str & mems(i).No & ","
  End If
 End If
Next i

' Quitter le programme si aucune barre n'a été trouvée
If mems_str = vbanullstr Then
 Err.Raise 514, "Get members", "No member with cross-section "" " & crsc_desc & " "" found!"
End If

Obtenir l'interface du module additionnel

La connexion à un module est identique à celle à RFEM ou RSTAB. La différence est qu'il n'y a aucune différence entre ouvrir une instance déjà ouverte ou une nouvelle instance, car une instance est déjà systématiquement ouverte :

' Obtenir l'interface du module
Dim iStec3 As STEEL_EC3.Module
Set iStec3 = iModel.GetModule("STEEL_EC3")

Tous les cas existants du module sont ensuite supprimés :

' Obtenir les numéros des cas existants du module
Dim count As Long
count = iStec3.moGetCaseCount

' Si des cas existent, toujours supprimer le premier du tableau
If count > 0 Then
 For i = 0 To count - 1
  iStec3.moDeleteCase i, AT_INDEX
 Next i
End If

Vous pouvez alors créer le cas souhaité et entrer la barre à calculer à l'aide de la chaîne préalablement créée.

' Créer le cas de module « Optimisation »
Dim iStec3Case As STEEL_EC3.ICase
Set iStec3Case = iStec3.moSetCase(1, "Optimization")

' Paramétrer les barres pour la vérification
iStec3Case.moSetMemberList mems_str

Vous pouvez également entrer les combinaisons de charges de votre choix :

' Paramétrer les combinaisons de charge
Dim iStec3_uls_loads(0 To 2) As STEEL_EC3.ULS_LOAD

iStec3_uls_loads(0).DesignSituation = DS_FUNDAMENTAL
iStec3_uls_loads(0).No = 1
iStec3_uls_loads(0).Type = ILOAD_GROUP

iStec3_uls_loads(1).DesignSituation = DS_FUNDAMENTAL
iStec3_uls_loads(1).No = 2
iStec3_uls_loads(1).Type = ILOAD_GROUP

iStec3_uls_loads(2).DesignSituation = DS_FUNDAMENTAL
iStec3_uls_loads(2).No = 3
iStec3_uls_loads(2).Type = ILOAD_GROUP

iStec3Case.moSetULSLoads iStec3_uls_loads

Résumé

Les procédures décrites dans cet article peuvent être appliquées pour tous les modules pouvant être contrôlés par COM. Le code source et le fichier Excel (disponibles au téléchargement ci-dessous) vous aident à mieux comprendre cette thématique. L'article 4.2 approfondit le sujet de l'optimisation de portique et explique le lien entre les éléments dans le module et ceux dans le programme de base.

Téléchargements

Liens

Contactez-nous

Contactez-nous

Des questions sur nos produits ? Besoin de conseils sur un projet ?
Contactez notre assistance technique gratuite par e-mail, via le chat Dlubal ou sur notre forum international. N'hésitez pas à consulter les nombreuses solutions et astuces de notre FAQ.

+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
RFEM Structures en acier
RF-STEEL EC3 5.xx

Module additionnel

Vérification des barres en acier selon l'Eurocode 3

Prix de la première licence
1 480,00 USD
RFEM Autres
RF-COM 5.xx

Module additionnel

Interface programmable (API) basée sur la technologie COM

Prix de la première licence
580,00 USD