Interfaccia COM in VBA | 2.2 Creazione dell'asta

Articolo tecnico

Questo articolo è stato tradotto da Google Traduttore Visualizza il testo originale

La parte 2.1 della serie di articoli sull'interfaccia COM descrive la creazione e la modifica di elementi su un esempio di asta. Nella terza parte, questi elementi fondamentali saranno utilizzati nuovamente per creare vincoli esterni nodali, carichi, combinazioni di carico e di risultati. Così, il modello creato nella seconda parte sarà esteso. Pertanto, gli elementi spiegati nella Parte 1 e nella Parte 2.1 non saranno più descritti.

Figura 01 - System

Ottieni l'interfaccia del modello aperto

A differenza degli ultimi due articoli, un modello esistente già aperto in RFEM sarà caricato ora. In questo esempio, si apre il modello del secondo articolo. Per prima cosa, l'interfaccia per l'applicazione aperta sarà recuperata:

' Interface with RFEM is retrieved.
Dim iApp As RFEM5.Application
Set iApp = GetObject(, "RFEM5.Application" )

Quindi, il gestore degli errori sarà avviato e la licenza sarà bloccata:

' Error Handler
On Error GoTo e

' COM license and program access is locked.
iApp.LockLicense

Si consiglia di avviare il gestore prima di bloccare la licenza, altrimenti RFEM rimane bloccato in caso di errore e può essere chiuso solo con Task Manager. Poiché l'interfaccia è ora pronta per essere applicata, è possibile ottenere l'interfaccia per il modello:

' Get interface for the first model.
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

Per una migliore gestione degli errori, è possibile verificare se il modello è effettivamente disponibile (GetModelCount in questo caso) prima di recuperare il modello. Anche nel caso di altre interfacce, come l'interfaccia per casi di carico o carichi, è possibile indicare gli errori in un modo migliore.

Creazione dei vincoli esterni dei nodi

Si dovrebbe creare una trave a campata unica e, poiché l'asta si trova lungo l'asse x, anche la traslazione x, y, z e la rotazione attorno all'asse x e z devono essere bloccate sul nodo 1. Il vincolo esterno del nodo 2 è simile al primo fino alla traslazione libera nella direzione x. Prima di creare i vincoli esterni nodali, è ancora necessario recuperare l'interfaccia per i dati del modello. Quando si definisce il vincolo esterno, è necessario assicurarsi che, in caso di gradi di libertà, il numero maggiore o uguale a 0 sia equalizzato con il rilascio utilizzando una costante elastica. Qui, si usano anche le unità SI, ovvero N / me N / rad:

' Get interface for model data.
Dim iModelData As RFEM5.iModelData
Set iModelData = iModel.GetModelData()

' Create nodal supports.
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

Se si verificano problemi, potrebbero essere causati dal tipo di dati errato. Se è richiesta la doppia, la voce intera potrebbe causare errori. Quindi, è necessario aggiungere una chiave di hash dopo il valore intero, in modo che sia utilizzato come valore doppio.

Naturalmente, il vincolo esterno del nodo deve essere nuovamente trasferito nella modalità di modifica (PrepareModification / FinishModification):

' Transfer nodal supports.
iModelData.PrepareModification
iModelData.SetNodalSupports nodsups
iModelData.FinishModification

Crea casi di carico

Per creare i carichi, è necessario definire prima i casi di carico, esattamente come in RFEM. Quando si programma, i casi di carico vengono creati e trasferiti per primi, e solo successivamente i carichi possono essere trasferiti utilizzando le interfacce dei casi di carico. Per prima cosa, creiamo i casi di carico:

' Get interface for loads.
Dim iLoads As RFEM5.iLoads
Set iLoads = iModel.GetLoads

' Create load cases.
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

Vi sono tre casi di carico da creare: peso proprio, neve e carico imposto. Nella programmazione COM tutti gli identificatori sono in inglese. Pertanto, Permanent viene utilizzato per ActionCategory nel caso del caso di carico autonomo. Per la proprietà SelfWeightFactor, è possibile impostare la direzione e il valore del peso proprio. Tuttavia, si applicano solo se la proprietà di peso proprio è impostata su Vero.

Inoltre, ToSolve deve essere impostato su True per includere il caso di carico nel calcolo e per assegnare un numero al caso di carico (.Loading.No). Gli altri due casi di carico sono definiti con maggiore facilità in quanto non c'è peso proprio:

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

' Transfer load cases.
iLoads.PrepareModification
iLoads.SetLoadCases loadcases
iLoads.FinishModification

La categoria ShowHLowerThan1000 viene utilizzata per neve sotto un'altitudine di 1.000 m sul livello del mare e ImposedCategoryA è utilizzata per il carico imposto di Categoria A. Quindi, i casi di carico possono essere trasferiti a RFEM. Tuttavia, al posto dell'interfaccia IModelData viene utilizzata l'interfaccia ILoads poiché i dati del modello non sono più interessati, ma piuttosto i dati di carico.

Crea combinazioni di carico e risultato

Quando si creano combinazioni di carico o di risultato, ci sono solo alcune differenze. Il motivo è che il metodo di calcolo e altre impostazioni possono essere applicate solo dopo aver creato la combinazione di carico tramite l'interfaccia corrispondente. La definizione è eseguita come in RFEM. A tale scopo, è possibile utilizzare l'identificativo LC (Load Case). I diversi separatori decimali e le lettere maiuscole e minuscole non hanno alcun ruolo ed entrambi sono accettati:

' Create load combinations.
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"

' Transfer load combinations.
iLoads.PrepareModification
iLoads.SetLoadCombinations loadcombs
iLoads.FinishModification

' Create result combinations.
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"

' Transfer result combinations.
iLoads.PrepareModification
iLoads.SetResultCombinations rescombs
iLoads.FinishModification

Creazione di carichi

Come accennato in precedenza, i carichi saranno ora trasferiti utilizzando le interfacce per i casi di carico. Nel nostro esempio, tutti i carichi aggiuntivi saranno creati nel caso di carico 1. Nel caso di carico 2, sarà applicato un carico distribuito trapezoidale. Il caso di carico 3 applica un carico lineare costante e un carico nodale. Ecco la procedura per il caso di carico 2:

' Create loads.
' Load Case 2.
Dim iLoadCase As RFEM5.iLoadCase
Set iLoadCase = iLoads.GetLoadCase(2, AtNo)

Poiché conosciamo il numero del caso di carico, può essere utilizzato con AtNo quando si recupera l'interfaccia:

' Create member loads.
Dim memLoads() As RFEM5.MemberLoad
ReDim memLoads(0 To 0)

In questo caso, l'array non sarà quotato all'inizializzazione, ma successivamente, poiché i memLoad dovrebbero essere riutilizzati per il caso di carico 3. Ciò ha il vantaggio che il contenuto sarà ripristinato sui valori predefiniti quando si utilizza nuovamente ReDim. In ObjectList, è possibile selezionare le aste da caricare, separate da virgole o collegate da trattini. Oltre ai valori di carico per l'inizio del carico (Magnitudo 1) e l'estremità del carico (Magnitudine 2), il carico trapezoidale richiede la specificazione delle distanze per l'inizio del carico (Distanza A) e la fine (Distanza B). La proprietà RelativeDistances determina se saranno utilizzati i dati assoluti (False) in m o relativi (True) di 0-1:

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

' Transfer member loads.
iLoadCase.PrepareModification
iLoadCase.SetMemberLoads memLoads
iLoadCase.FinishModification

Quando si trasferiscono i carichi, è necessario impostare l'interfaccia corretta, in questo caso l'interfaccia ILoadCase. I carichi del caso di carico 3 sono definiti come segue:

' Create nodal loads.
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

' Transfer nodal loads.
iLoadCase.PrepareModification
iLoadCase.SetNodalLoads nodalLoads
iLoadCase.FinishModification

' Create member loads.
ReDim memLoads(0 To 0)
memLoads(0).No = 1
memLoads(0).ObjectList = "1"
memLoads(0).Distribution = UniformType
memLoads(0).Magnitude1 = 5000#

' Transfer member loads.
iLoadCase.PrepareModification
iLoadCase.SetMemberLoads memLoads
iLoadCase.FinishModification

Quando si chiude il programma, la routine del gestore errori è completata e la licenza è sbloccata:

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

' COM license is unlocked, the program access is possible again.
iModel.GetApplication.UnlockLicense

Riepilogo e panoramica

Le procedure mostrate nell'articolo si basano sui due articoli precedenti. Come già detto, la struttura è simile per tutti gli elementi. La menzionata eccezione delle versioni di aste non lineari o dei vincoli esterni nodali sarà spiegata nel prossimo articolo.

Scarica

Link

Contattaci

Contattaci

Hai domande o bisogno di consigli?
Contattaci gratuitamente tramite e-mail, chat o il nostro forum di supporto o trova varie soluzioni e consigli utili nella nostra pagina delle FAQ.

+39 051 9525 443

info@dlubal.it

RFEM Programma principale
RFEM 5.xx

Programma principale

Software di progettazione strutturale per l'analisi con elementi finiti (FEA) di sistemi strutturali piani e spaziali costituiti da piastre, pareti, gusci, aste (travi), elementi solidi e di contatto

Prezzo della prima licenza
3.540,00 USD
RFEM Other
RF-COM 5.xx

Modulo aggiuntivo

Interfaccia programmabile (API) basata sulla tecnologia COM

Prezzo della prima licenza
580,00 USD