Interfaccia COM in VBA | 3. Strumento di creazione

Articolo tecnico

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

La parte 2.2 della serie di articoli sull'interfaccia COM descrive la creazione e la modifica di vincoli esterni nodali, carichi, casi di carico, combinazioni di risultati e di risultati su un esempio di asta. Questa parte spiega come creare singoli strumenti.

Figura 01 - Strumento EXCEL creato individualmente in RFEM

Informazioni di base

Vogliamo creare uno strumento che crei i vincoli esterni non lineari sul nodo attualmente selezionato nel programma. Per questo sono necessari i seguenti elementi fondamentali:

  • Ottenere nodi attualmente selezionati
  • Creazione dei vincoli esterni dei nodi
  • Creazione e assegnazione di non linearità
  • Creazione di strumenti nel programma

Nel seguito, questi punti saranno elaborati. Per questo, la conoscenza degli articoli precedenti è richiesta e non sarà discussa più. Tuttavia, gli elementi già disponibili nel codice sorgente disponibile, come ottenere la struttura nei commenti, sono quasi documentati.

Ottieni nodi attualmente selezionati

La modifica di elementi selezionati tramite l'interfaccia COM viene eseguita utilizzando le funzioni già familiari come IModelData.GetNodes per i nodi. Per restituire solo gli elementi selezionati, è necessario passare alla modifica della selezione attuale tramite IModelData.EnableSelections. Se EnableSelections è impostato su True, IModelData.GetNodes restituisce solo gli elementi selezionati.Qui è l'esempio concreto:

'Ottieni nodi selezionati'
iModDat.EnableSelections Vero 'Funziona solo con gli oggetti selezionati
Dim nodi () come RFEM5.Nodo
Nodi = iModDat.GetNodes
iModDat.EnableSelections Falso 'Lavora di nuovo con tutti gli oggetti

Se i nodi selezionati sono stati recuperati, EnableSelections è impostato su Errato perché può diventare una frequente fonte di errori. Poiché il vincolo esterno del nodo richiede un elenco di nodi come stringa, questo sarà creato come segue:

'Crea un elenco di nodi
Dim elenco dei nodi come Stringa
Dim io comeLungo
Per i = 0 AUBound (nodi, 1)
nodeList = nodeList & nodes (i) .No & ","
Avanti i

Creazione dei vincoli esterni dei nodi

La non linearità, in questo caso il diagramma, è un elemento separato. Può essere assegnato ad un vincolo esterno nodale solo se è già disponibile nella struttura. Pertanto, è necessario creare un vincolo esterno nodale secondo i principi noti dei precedenti contributi:

'Crea vincoli esterni nodali
Dim nodSup come RFEM5.NodalSupport
nodSup.No = 100
nodSup.IsColumn = Falso
nodSup.IsValid = Vero
nodSup.nodeList = nodeList
nodSup.ReferenceSystem = GlobalSystemType

nodSup.RestraintConstantX = 0.01
nodSup.RestraintConstantY = 0.01
nodSup.RestraintConstantZ = 0.01

nodSup.SupportConstantX = -1
nodSup.SupportConstantY = -1
nodSup.SupportConstantZ = -1

'Definisci non-linearità'
nodSup.SupportNonlinearityZ = WorkingDiagramType

Modifica iModDat.Prepare
iModDat.SetNodalSupport nodSup
Modifica iModDat.Finish

Come si può vedere nel codice, il tipo WorkingDiagramType è indicato come non-linearità nella direzione globale della z.

Creazione e assegnazione di vincoli esterni non lineari

Ora che il vincolo esterno del nodo è stato preparato per la non linearità, WorkingDiagramType, deve essere creato:

'Crea non-linearità'
Dim nldgrm come RFEM5.NonlinearityDiagram

nldgrm.ForceType = StiffnessDiagramForceType.NoneStiffnessForce
nldgrm.PositiveZoneType = DiagramAfterLastStepType.StopDiagramType
nldgrm.Symmetric = Vero

'Crea diagramma
ReDim nldgrm.PositiveZone (3, 1)
nldgrm.PositiveZone (0, 0) = 0 #
nldgrm.PositiveZone (0, 1) = 0 #

nldgrm.PositiveZone (1, 0) = 0.01
nldgrm.PositiveZone (1, 1) = 100

nldgrm.PositiveZone (2, 0) = 0.03
nldgrm.PositiveZone (2, 1) = 200

nldgrm.PositiveZone (3, 0) = 0.05
nldgrm.PositiveZone (3, 1) = 300

Il diagramma è costituito da un campo bidimensionale. La prima dimensione corrisponde al set di dati e la seconda dimensione agli elementi dell'insieme di dati. In questo esempio, il primo elemento nel set di dati è lo spostamento in m e il secondo la forza in N. L'esempio precedente crea quindi quattro set di dati dove, ad esempio, il terzo punto del diagramma è di 30 mm e 0.2 kN a la posizione. Questa non-linearità deve ora essere assegnata al vincolo esterno disponibile. Per fare questo, portiamo l'interfaccia al vincolo esterno nodale e quindi alla non linearità:

'Applica non linearità'
Dim iNodSup come RFEM5.InodalSupport
Imposta iNodSup = iModDat.GetNodalSupport (100, ItemAt.AtNo)
Dim iNldiag come RFEM5.INonlinearityDiagram
Imposta iNldiag = iNodSup.GetNonlinearity (AlongAxisZ)

Modifica iModDat.Prepare
iNldiag.SetData nldgrm
Modifica iModDat.Finish

La non linearità si trova lungo l'asse Z e pertanto deve essere selezionata quando si chiama LengthAxisZ. Questi sono assegnati nel noto blocco di modifica.

Creazione di strumenti nel programma

In RFEM è possibile integrare programmi esterni. Per fare questo, è necessario modificare RFEM.ini nel percorso del programma. A differenza della programmazione in C # e VB, dove si crea un file eseguibile, Excel deve essere utilizzato per l'esecuzione dello strumento in VBA. Ad Excel può essere assegnato un file aperto usando un argomento all'avvio. Apparirà come nella riga di comando, dove il file di Excel è memorizzato in C: \ temp ed Excel è installato come versione a 32 bit:
"C: \ Programmi (x86) \ Microsoft Office \ Office15 \ EXCEL.EXE" C: \ temp \ table1.xlsm

Questo apre Excel con il file desiderato. Poiché è possibile aprire un programma esterno di RFEM senza ulteriori argomenti (come il nome file EXCEL.EXE in questo caso), è necessario creare un file batch di Windows. Questo semplice file di testo con estensione ".bat" è come Windows Copre un file EXE eseguibile. Per creare dati, è necessario creare un file TXT con l'editor, ad esempio, che riceverà la nuova estensione ".bat" dopo la creazione. La visualizzazione dell'estensione del file potrebbe non essere visualizzata prima in Esplora risorse. Il file batch (di seguito EXCEL-Werzeug.bat) deve contenere la seguente voce:
"C: \ Programmi (x86) \ Microsoft Office \ Office15 \ EXCEL.EXE" C: \ temp \ table1.xlsm
Corrisponde al comando come verrebbe inserito nella riga di comando.

Dopo aver creato il file eseguibile, è possibile inserirlo nel file RFEM.ini come strumento esterno. RFEM.ini si trova nel percorso di programma di RFEM (Standard per RFEM 5.07 64-Bit: C: \ Programmi \ Dlubal \ RFEM 5.07). Devono essere aggiunte le seguenti voci:

ModuleName2 = Strumento EXCEL
ModuleExeName2 = "c: \ temp \ EXCEL-Tools.bat"
ModuleDescription2 = Svincolo dell'asta non-lineare

Naturalmente, è necessario salvare il file batch EXCEL-Werkzeug.bat e la tabella macro.xlsmauch in C:/temp/.

Per garantire che la macro venga eseguita automaticamente, è necessario avviare la subroutine nella subroutine automaticamente eseguita da Excel all'apertura. Questa subroutine si chiama cartella di lavoro Apri e deve essere memorizzata nella cartella di lavoro.

Figura 02 - Cartella di lavoro Sottoprogramma Apri nella cartella di lavoro

Ora non è ancora possibile uscire da Excel dopo che il programma è stato eseguito con successo. Se si verifica un errore o RFEM non è aperto, è possibile modificare la macro. A tal fine, sarà costruita una distinzione tra maiuscole e minuscole. Il modello completo ha il seguente aspetto:

Privato SubWorkbook_Open ()

'Errore durante la gestione del programma di routine avvia RFEM
On Error GoTo

Porta l'interfaccia a RFEM
Dim iApp comeRFEM5.Applicazione
Imposta iApp = GetObject (, "RFEM5.Application")

e: 'Se si verifica un errore' RFEM non si apre '
Se Numero errore <> 0 Quindi
MsgBox "RFEM non aperto", Err.Source
   Esci Sub
Fine Se

'Errore nella gestione del programma di routine
On Error GoTo [F5]

La licenza COM e l'accesso al programma sono bloccati
iApp.LockLicense

'Ottieni interfaccia per modello attivo
Dim Modello come RFEM5.model
Se iApp.GetModelCount> 0 Quindi
Imposta iModel = iApp.GetActiveModel
Altro
'Errori se non ci sono abbastanza modelli disponibili
Err.Raise vbObjectError, "LoadModel ()", "iApp.GetModelCount <1"
Fine Se

'Spazio per il proprio codice sorgente

f: 'Intercetta gli errori dal codice sorgente
Se Err.Number <> 0 Then
MsgBox Err.Description ,, Err.Source
'La licenza COM è rilasciata, l'accesso al programma è possibile di nuovo
iModel.GetApplication.UnlockLicense
'Lo strumento dovrebbe tenere aperto Excel quando si verifica un errore
   Esci
Fine Se

La licenza COM è rilasciata, l'accesso al programma è possibile di nuovo
iModel.GetApplication.UnlockLicense
'Lo strumento dovrebbe chiudere Excel quando l'applicazione ha esito positivo
Applicazione.Smettere

Fine sott

Ora, tutto ciò che manca è il riferimento alla subroutine precedentemente creata, che si può trovare nella sezione "Posiziona per il proprio codice sorgente". Il codice sorgente completo è disponibile al seguente link.

Sommario

La creazione del vincolo esterno non lineare è un supplemento ai contributi precedenti, mentre la creazione di un modulo esterno è un nuovo territorio. L'incorporamento è meno problematico quando si utilizzano file eseguibili, come quelli creati con l'aiuto di Visual Studio e VB o C #. Per questo motivo, la procedura più complessa con Excel è stata descritta qui.

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