1548x
001459
29.06.2017

Interface COM en VBA | 4.1 Optimisation de portique

Les sections 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. Der fünfte Teil deckt dabei die Anbindung des Moduls und das Holen relevanter Stäbe ab. Les éléments déjà expliqués dans les parties précédentes ne seront pas décrits à nouveau.

Filtrage des barres pertinentes

L'objectif est de transférer uniquement les barres d'une certaine section vers le calcul RF-/STEEL EC3. Dans l'exemple suivant, toutes les barres avec la section IPE 300 doivent être filtrées. Pour ce faire, toutes les sections doivent d'abord être extraites du programme principal :


'   Créer une chaîne de la section souhaitée
Dim crsc_descAs String

crsc_desc ="IPE 300"

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

' Faire un boucle sur toutes les sections
Dim crsc_noAs Long
crsc_no = -1
Dim iAs Long
For i = 0To UBound(crscs, 1)
' Si la description de la section est correcte, enregistrez le numéro de la section
If InStr(LCase(crscs(i).Description), LCase(crsc_desc)) > 0Then
crsc_no = crscs(i).No
Exit For
End If
Next i

' Quitter le programme si la section souhaitée n'a pas été trouvée
If crsc_no = -1Then
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 aussi généralement que possible. Pour ce faire, la description de la section ainsi que la chaîne à rechercher sont d'abord définies en lettres minuscules via « LCase », puis la chaîne est recherchée dans la description de la section. Si aucune section appropriée n'est trouvée, le numéro de section reste à -1, ce qui peut être demandé et acquitté par un abandon.

Après cette étape, le numéro de section est connu et les barres avec ce numéro de section peuvent être recherchées. Seule la barre avec cette section au début et à la fin de la barre doit être reprise :

' Créer une chaîne pour la liste de barres et la définir à zéro
Dim mems_strAs String
mems_str = vbanullstr

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

' Faire un boucle sur toutes les barres
For i = 0To UBound(mems, 1)
' Si une barre a ce numéro de section au début et à la fin,
' alors prenez ce nombre dans la chaîne
If mems(i).EndCrossSectionNo = crsc_noThen
If mems(i).EndCrossSectionNo = mems(i).StartCrossSectionNoThen
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 = vbanullstrThen
Err.Raise 514, "Get members","No member with cross-section "" " & crsc_desc &" "" found!"
End If

Obtenir l'interface du module additionnel

Le lien vers un module est identique à celui vers RFEM ou RSTAB. La seule différence est qu'il n'y a pas de différence entre l'ouverture d'une instance déjà ouverte et l'ouverture d'une nouvelle instance, car il y a toujours une instance déjà ouverte :

' Obtenir l'interface pour le module
Dim iStec3As STEEL_EC3.Module
Set iStec3 = iModel.GetModule("STEEL_EC3")

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

' Obtenir le nombre de cas de module existants
Dim countAs Long
count = iStec3.moGetCaseCount

' S'il y a des cas, supprimez toujours le premier dans le tableau
If count > 0Then
For i = 0To count - 1
iStec3.moDeleteCase i, AT_INDEX
Next i
End If

Vous pouvez maintenant créer le cas souhaité et entrer la barre à vérifier à l'aide de la chaîne créée précédemment.

' Création du cas de module 'Optimization'
Dim iStec3CaseAs STEEL_EC3.ICase
Set iStec3Case = iStec3.moSetCase(1,"Optimization")

' Définir les barres pour le calcul
iStec3Case.moSetMemberList mems_str

Enfin, vous pouvez entrer les combinaisons de charges souhaitées :

' Définir les combinaisons de charges
Dim iStec3_uls_loads(0To 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é et perspectives

Les procédures décrites dans cet article peuvent être utilisées pour tous les modules qui peuvent être contrôlés par COM. Le code source et le fichier Excel vous aident à mieux comprendre le sujet traité. Dans le prochain article, nous approfondirons ce sujet en expliquant le lien entre les éléments dans le module et dans le programme principal.


Auteur

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

Liens
Téléchargements