1552x
001459
2017-06-29

Interfaccia COM in VBA | 4.1 Ottimizzazione del telaio

Le sezioni 4.1 e 4.2 di questa serie di articoli descrivono l'ottimizzazione di un telaio utilizzando il modulo aggiuntivo RF-/STEEL EC3. Der fünfte Teil deckt dabei die Anbindung des Moduls und das Holen relevanter Stäbe ab. Auf die Elemente, welche in vorangegangenen Teilen bereits erläutert wurden, wird nicht nochmal eingegangen.

Filtraggio delle aste pertinenti

L'obiettivo è quello di trasferire solo le aste di una certa sezione trasversale al progetto RF-/STEEL EC3. Nell'esempio seguente, tutte le aste con la sezione trasversale IPE 300 devono essere filtrate. Per questo, è necessario ottenere prima tutte le sezioni trasversali dal programma principale:


'   Crea una stringa della sezione trasversale desiderata
fioco crsc_descCome stringa

crsc_desc ="IPE300"

' Ottieni tutte le sezioni trasversali da RFEM
fioco crsc()As RFEM5.CrossSection
crscs = iModelData.GetCrossSections

' Loop su tutte le sezioni trasversali
fioco crsc_noFinché
crsc_no = -1
fioco iFinché
Per i = 0To UBound(crsc, 1)
' Se la descrizione della sezione trasversale è corretta, salvare il numero della sezione trasversale
If InStr(LCase(crscs(i).Descrizione), LCase(crsc_desc)) > 0Allora
crsc_no = crscs(i).No
Esci per
End If
Successivo i

' Uscire dal programma se la sezione trasversale desiderata non è stata trovata
If crsc_no = -1Allora
Err.Alza 513, "Ottieni il numero della sezione trasversale","Nessuna sezione trasversale con "" " & crsc_desc &" "" trovato all'interno della sua descrizione!"
End If

La descrizione della sezione trasversale deve essere sincronizzata nel modo più generale possibile. Per questo, la descrizione della sezione trasversale e la stringa da cercare sono impostate in lettere minuscole tramite "LCase", quindi la stringa viene cercata nella descrizione della sezione trasversale. Se non viene trovata una sezione trasversale adatta, il numero della sezione trasversale rimane a -1, che può essere richiesto e confermato con un'interruzione.

Dopo questo passaggio, il numero della sezione trasversale è noto e le aste con questo numero di sezione trasversale possono essere ricercate. Dovrebbe essere adottata solo l'asta con questa sezione trasversale all'inizio e alla fine dell'asta:

' Crea una stringa per l'elenco delle aste e impostala su zero
fioco mems_strCome stringa
mems_str = vbanullstr

' Ottieni tutte le aste da RFEM
fioco mem()As RFEM5.Member
mems = iModelData.GetMembers

' Loop su tutti i membri
Per i = 0To UBound(mems, 1)
' Se un'asta ha questo numero di sezione trasversale all'inizio e alla fine,
' quindi prendi questo numero nella stringa
If mems(i).EndCrossSectionNo = crsc_noAllora
If mems(i).EndCrossSectionNo = mems(i).StartCrossSectionNoAllora
mems_str = mems_str & mems (i).No & ","
End If
End If
Successivo i

' Uscire dal programma se non è stato trovato alcun membro
If mems_str = vbanullstrAllora
Err.Alza 514, "Ottieni membri","Nessuna asta con sezione trasversale "" " & crsc_desc &" "" trovato!"
End If

Ottenere l'interfaccia del modulo aggiuntivo

Il collegamento a un modulo è esattamente lo stesso del collegamento a RFEM o RSTAB. L'unica differenza è che non c'è differenza tra l'apertura di un'istanza già aperta o l'apertura di una nuova istanza, poiché c'è sempre un'istanza già aperta:

' Ottieni l'interfaccia per il modulo
fioco iStec3As STEEL_EC3.Modulo
Set iStec3 = iModel.GetModule("STEEL_EC3")

Successivamente, tutti i casi di modulo esistenti vengono rimossi:

' Ottieni il numero di casi di modulo esistenti
fioco contareFinché
conteggio = iStec3.moGetCaseCount

' Se ci sono casi, elimina sempre il primo nella tabella
If conteggio > 0Allora
Per i = 0To conteggio - 1
iStec3.moDeleteCase i, AT_INDEX
Successivo i
End If

Ora, è possibile creare il caso desiderato e inserire l'asta da progettare utilizzando la stringa creata in precedenza.

' Crea il caso del modulo 'Ottimizzazione'
fioco iStec3CaseAs STEEL_EC3.ICase
Set iStec3Case = iStec3.moSetCase(1,"Ottimizzazione")

' Imposta aste per la verifica
iStec3Case.moSetMemberList mems_str

Ultimo, ma non meno importante, è possibile inserire le combinazioni di carico desiderate:

' Imposta combinazioni di carico
fioco 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

Riepilogo e prospettive

Le procedure descritte in questo articolo possono essere utilizzate per tutti i moduli che possono essere controllati da COM. Il codice sorgente e il file Excel aiutano a comprendere meglio l'argomento. Nel mio prossimo articolo, vorrei approfondire l'argomento e spiegare il collegamento tra gli elementi nel modulo e nel programma principale.


Autore

Il signor Günthel fornisce supporto tecnico per i clienti di Dlubal Software e si prende cura delle loro richieste.

Link
Download