L'esempio che segue illustra passo-passo uno dei possibili utilizzi delle Api di Straus7. In linea generale le API di Straus7 si caratterizzano per:
Ecco alcuni esempi di procedure che sono state automatizzate con l'impiego delle API, realizzando un significativo risparmio di tempo nell'attivita' della progettazione:
Nell'esempio presentato nel seguito si descrive una semplice procedura utilizzata per risolvere un esempio applicativo costituito da una mensola incastrata:
Eventuali errori incontrati dalla macro, vengono segnalati con i relativi messaggi.
La seguente figura illustra l'organizzazione del foglio di lavoro.
Segue la macro commentata in Excel che illustra lo svolgimento delle operazioni suddette. Sono state utilizzate le seguenti convenzioni per i contenuti:
Sub calcolo()
' calcolo Macro
' Macro registrata il 12/12/2003 da Giorgio Galvan - EnginSoft Padova
'
' Dichiarazione delle variabili utilizzate
' Variabili di ciclo
Dim I As Integer, J As Integer
' Variabile errore che contiene i messaggi di errore generati dalle API di Straus7.
Dim errore As Integer
' Stringa contenente il percorso del file.
Dim percorso As String
' Stringa contenente il nome del modello.
Dim modello As String
' Altra stringa contenente il nome del modello
Dim nome_modello As String
' Stringa contenente il percorso per la direcory dei files temporanei.
Dim temporaneo As String
' Vettore per le coordinate dei nodi.
Dim XYZ(2) As Double
' Numero intero conenente il numero del nodo.
Dim nodo As Long
' Numeri interi contenenti numero e tipo di proprietà
Dim numeroproprieta As Integer, tipoproprieta As Integer
' Stringa contenente il nome della proprietà.
Dim nomeproprieta As String
' Numero intero conenente l'indice del tipo di sezione
Dim tiposezione As Integer
' Vettori per i parametri da inserire
Dim parametri(5) As Double
Dim materiale(3) As Double
' Indice di elementi e nodi
Dim elemento As Long, nodi(3) As Long
Dim vincoli(6) As Long
Dim cedimenti(6) As Double
Dim nodo_vincolato As Long
Dim nodo_caricato As Long
Dim forze(10) As Double, momenti(10) As Double
Dim modalita As Long, attesa As Long
Dim tot_nodi As Long, tot_beam As Long
Dim sezione(100) As Double
Dim nome_analisi As String
Dim reazioni(10) As Double, spostamenti(10) As Double
' Vettori conenenti le posizioni ed i risultati per elementi trave.
Dim beam_pos(10) As Double
Dim beam_res(100) As Double
' Vettore dove inserire i parametri geometrici.
Dim sistema(5) As Long
' Ciclo di salvataggio dei dati inseriti nel foglio di calcolo nel vettore sistema.
For I = 0 To 5
sistema(I) = Cells(I + 9, 4).Value
Next I
' Lettura dei nomi dei files e della directory per ii files temporanei
percorso = Cells(3, 3).Value
temporaneo = Cells(4, 3).Value
modello = Cells(5, 3).Value
nome_modello = percorso & modello & ".st7"
nome_analisi = percorso & modello & ".lsa"
' pulizia valori calcolati
Range("T4:U24").Select
Selection.ClearContents
Range("L3:L5").Select
Selection.ClearContents
Range("L8:P8").Select
Selection.ClearContents
Range("K12:Q12").Select
Selection.ClearContents
Range("K16:Q16").Select
Selection.ClearContents
Range("K21:Q22").Select
Selection.ClearContents
Range("A1").Select
' Chiamata di inizializzazione alle API di Straus7.
' Tale chiamata dovrà essere sempre presente all'inizio di ogni procedura
' scritta con le API di Straus7
St7Init
' apertura nuovo file
errore = St7NewFile(1, nome_modello, temporaneo)
Cells(4, 20).Value = errore
' scrittura unità di misura
errore = St7SetUnits(1, sistema(0))
Cells(5, 20).Value = errore
' lettura coordinate nodi
For I = 1 To 2
nodo = Cells(I + 19, 1).Value
For J = 0 To 2
XYZ(J) = Cells(I + 19, J + 2).Value
Next J
errore = St7SetNodeXYZ(1, nodo, XYZ(0))
Cells(6, I + 19).Value = errore
Next I
' definizione proprietà beam
numeroproprieta = Cells(26, 1).Value
nomeproprieta = Cells(26, 2).Value
tipoproprieta = 6
errore = St7NewBeamProperty(1, numeroproprieta, tipoproprieta, nomeproprieta)
Cells(7, 20).Value = errore
' definizione sezione beam
tiposezione = 2
parametri(0) = Cells(26, 3).Value
parametri(3) = Cells(26, 4).Value
errore = St7SetBeamSectionGeometry(1, numeroproprieta, tiposezione, parametri(0))
Cells(8, 20).Value = errore
' calcolo proprietà sezione beam
errore = St7CalcBeamSectionProperties(1, numeroproprieta, 1)
Cells(9, 20).Value = errore
' definizione materiale
materiale(0) = Cells(31, 2).Value
materiale(2) = Cells(31, 3).Value
materiale(3) = Cells(31, 4).Value
errore = St7SetBeamMaterialData(1, numeroproprieta, materiale(0))
Cells(10, 20).Value = errore
' definizione elemento beam
elemento = Cells(37, 1).Value
nodi(0) = Cells(37, 2).Value
nodi(1) = Cells(37, 3).Value
nodi(2) = Cells(37, 4).Value
errore = St7SetElementConnection(1, 1, elemento, numeroproprieta, nodi(0))
Cells(11, 20).Value = errore
' assegnazione vincoli
nodo_vincolato = Cells(43, 1).Value
For I = 0 To 5
vincoli(I) = Cells(43, I + 2).Value
cedimenti(I) = 0
Next I
errore = St7SetNodeRestraint6(1, nodo_vincolato, 1, 1, vincoli(0), cedimenti(0))
Cells(12, 20).Value = errore
' assegnazione carichi nodali
nodo_caricato = Cells(49, 1).Value
For I = 0 To 2
forze(I) = Cells(49, I + 2).Value
momenti(I) = Cells(49, I + 5).Value
Next I
errore = St7SetNodeForce3(1, nodo_caricato, 1, forze(0))
Cells(13, 20).Value = errore
errore = St7SetNodeMoment3(1, nodo_caricato, 1, momenti(0))
Cells(14, 20).Value = errore
' impostazione calcolo reazioni vincolari
errore = St7SetEntityResult(1, 11, 1)
Cells(15, 20).Value = errore
' salvataggio file
St7SaveFile(1)
' lancio analisi
modalita = Cells(54, 2).Value
attesa = Cells(54, 5).Value
errore = St7RunSolver(1, 1, modalita, attesa)
Cells(16, 20).Value = errore
' lettura numero di nodi
errore = St7GetTotal(1, 0, tot_nodi)
Cells(18, 20).Value = errore
Cells(3, 12).Value = tot_nodi
' lettura numero di elementi
errore = St7GetTotal(1, 1, tot_beam)
Cells(19, 20).Value = errore
Cells(5, 12).Value = tot_beam
' lettura proprietà beam
errore = St7GetBeamProperty(1, numeroproprieta, 6, 2, 0, sezione(0), materiale(0))
Cells(20, 20).Value = errore
Cells(8, 12).Value = numeroproprieta
For J = 0 To 3
Cells(8, J + 13).Value = sezione(J)
Next J
' apertura risultati analisi
errore = St7OpenResultFile(1, nome_analisi, "", 0, 1, 0)
Cells(22, 20).Value = errore
' lettura reazioni vincolari al nodo vincolato
errore = St7GetNodeResult(1, 5, 1, 1, reazioni(0))
Cells(23, 20).Value = errore
Cells(12, 11).Value = 1
For I = 0 To 5
Cells(12, I + 12).Value = reazioni(I)
Next I
For I = 1 To 10
Cells(I, 30).Value = reazioni(I)
Next I
' lettura spostamenti al nodo libero
errore = St7GetNodeResult(1, 1, 2, 1, spostamenti(0))
Cells(23, 21).Value = errore
Cells(16, 11).Value = 2
For I = 0 To 5
Cells(16, I + 12).Value = spostamenti(I)
Next I
' lettura parametri di sollecitazione beam
errore = St7GetBeamResult(1, 1, 1, 2, 1, 2, 6, beam_pos(0), beam_res(0))
Cells(24, 20).Value = errore
Cells(21, 11).Value = beam_pos(0)
Cells(22, 11).Value = beam_pos(1)
For I = 0 To 5
Cells(21, I + 12).Value = beam_res(I)
Cells(22, I + 12).Value = beam_res(I + 6)
Next I
' Chiusura file analisi
St7CloseResultFile(1)
' Chiusura file modello
St7CloseFile(1)
End Sub
La seguente figura illustra un'immagine del semplice modello creato attraverso le API:
Concludiamo questa breve nota rimarcando che le API di Straus7 sono ben documentate nel manuale a corredo con un congruo numero di esempi applicativi. Oltre al Visual Basic for Application di Excel, le API di Straus7 supportano i seguenti compilatori: