Ingegneria Edile, Strutturale & Geotecnica > .:C#, Excel, VB e Programmazione:.

VBA- Lezione 2 - Come far interagire foglio-codice

(1/14) > >>

afazio:
In questo secondo esempio mi propongo di mostrare come fare interagire un codice con un foglio strutturato in un ben determinato modo.

Posizione del problema:

sia data una palificata composta da "np" pali di diametro "dp" i cui centri sono posizionati nei punti di coordinate (Xpi; Ypi).
Fissiamo come numero massimo 20 pali.
I pali siano collegati in testa da un plinto sufficientemente rigido da poter considerare i pali vincolati alla rotazione nella loro sezione di testa.
Il peso del plinto dovrà essere determinato dall'utente e sommato col coefficiente di combinazione adeguato al sistema di azioni agenti allestradosso del plinto (oltre ai momenti di trasporto nel baricentro della palificata). Sia quindi dato lo spessore del plinto "Hpl" necessario per il trasporto dei tagli sul piano di testa pali.

Sia quindi dato un sistema di carichi derivanti da una combo che denominiamo "nCombo" costituito dalla sei componenti Tx, Ty, Tz, Mx, My, Mz affetti dai coefficienti di combinazione della combo in esame e che tengono conto del peso del plinto e degli eventuali momenti di trasporto del peso del plinto dal baricentro del plinto al baricentro della palificata.

Il sistema di riferimento xyz è tale che xy determina il piano orizzontale mentre z è verticale positivo verso l'alto. Il sistema sia levogiro.

Ci proponiamo:
- strutturare un semplice foglio di calcolo che esegua la distribuzione dei carichi sui pali di fondazione
- costruire una tabella delle combinazioni derivanti da una serie di combinazioni di carico

- a questo punto scrivere del codice che in automatico sostituisca le sollecitazioni lette dalla tabella delle combinazioni  nelle corrispondenti celle del foglio che esegue la distribuzione sui pali,
- far costruire al codice una tabella in cui riassumiamo per ciascuna combinazione, lo sforzo normale massimo sul palo, lo sforzo normale minimo sul palo, il taglio alla testa ed il momento flettente massimo sul palo.

Strada facendo potremo decidere di aggiungere altro che verrà in mente con ovvia modifca del codice.

E' naturale che prima di iniziare a comporre/strutturare fogli occorre avere chiaro il problema e sopratutto avere chiaro il procedimento di calcolo e come eseguire la distribuzione degli sforzi sui pali.




afazio:
Complichiamo il problema. Il plinto sia definito da una poligonale di cui conosciamo le coordinate dei suoi vertici. Occorrerà, pertanto, far calcolare l'area del plinto per poi, moltiplicato per la densità e per lo spessore, determinarne il peso. Inoltre occorrerà determinarsi la posizione del baricentro del plinto per poter poi eseguire il trasporto del peso del plinto nel punto baricentrico della palificata. Nella tabella delle combinazioni dovremo quindi inserire il coefficiente per cui moltiplicare il peso del plinto per rendere questa sollecitazione congruente con il tipo di combo dei carichi.
Iniziamo quindi a predisporci questo foglio.

Esso dovrà contenere una parte dove sia possibile dare in input i seguenti dati:
numero dei vertici della poligonale del plinto
spessore del plinto
area del plinto
densita del materiale cui è composto il plinto
una tabella di input delle coordinate della poligonale

poi occorrerà predisporre due celle atte a contenere le coordinate del baricentro del plinto
e le celle per depositarvi:
il coefficiente di combinazione del peso del plinto
il peso del plinto
i due momenti di trasporto dal baricentro del plinto al baricentro della palificata
per adesso credo non serva piu altro. Strada facendo vedremo se aggiungere altro.

La seconda sezione invece sara dedicata alla definzioone della geometria della palificata e per questo sarà necessario prevedere:
numero dei pali
diametro del palo
tabella delle coordinate dei pali
poi ci serviranno celle dove determinare :
l'area del singolo palo e dell'intera palificata
le coordinate del baricentro della palificata
le inerzie del palo singolo
le inerzie dell'intea palificata rispetto agli assi baricentrici
per adesso basta

Occorrerà pure una parte dedicata a riassumere:
la combo esaminata
le sollecitazioni derivanti dalla struttura sovrastante il plinto per quella specifica combo
le sollecitazioni sul piano passante per la testa dei pali.
Poi penso ci servirà qualche altra cella per la distribuzione del momento torcente e qualche altra cella col parametro Kh per la determinazione del massimo momento flettente sul palo.


Intanto iniziamo a formare lo scheletro del foglio.

NB. Non metterò a disposizione alcun file excel nè in corso di composizione di questo 3d e nemmeno alla fine. Chiunque volesse seguire lo sviluppo di questo esempio dovrà comporsi il foglio da se.

afazio:
nella immagine che segue riporto la maniera in cui ho pensato di strutturare la parte riguardante l'input dei dati del plinto



Uploaded with ImageShack.us

Da notare che
- ho dato il nome "NV" alla cella relativa al numero dei vertici della poligonale del plinto. Questo per facilitare la scrittura delle formule nelle celle e per poter accedere a questa cella eventualmente da VBA.
- ho gia distinto le celle che devono essere di input con il colore di sottofondo verdino mentre ho gia attribuito il valore 25.00 kN/m³ alla densità del materiale cui è costituito il plinto. Ma volendo lo si puo imporre come un dato di input cioè che deve inserire l'utente.

In questa struttura vi sono due errori che ovviamente correggerò. Il primo è proprio l'unità di misura della densità [kN/m²] anzichè [kN/m³] ed il secondo consiste nel fatto che ho indicato con lo stesso simbolo sia la densità che il coefficiente di combinazione. Penso di correggere chiamando questo secondo con gamma.f.

afazio:
La tabella delle coordinate deve essere tale che la poligonale sia chiusa, ciò significa che occorrerà informare l'utilizzatore che nella composizione della tabella faccia coincidere l'ultimo vertice col vertice iniziale.  Lo faremo mettendo una nota da qualche parte sul foglio o una nota in una cella (4p docet)

Adesso ci si presentano i primi problemi.
Come calcolare l'area della sezione a partire dalle coordinate dei vertici della poligonale?
Stessa domanda vale per le coordinate del baricentro.

Sappiamo che esistono delle formule che ci danno tutte le caratteristiche geometriche di una sezione definita dalle cordinate dei suoi vertici che coinvolgono delle sommatorie.

Per esempio l'area della sezione è definita da:

A = somma [(x.i - x.(i-1))*(y.i + y.(i-1))/2

in cui la somma è estesa da 2 ad NV

Allora possiamo pensare di aggiungere alla tabella delle coordinate altre tre colonne in cui, a partire dalla seconda riga, riportiamo:
nella prima colonna aggiuntiva: la differenza della x con la x precedente, 
nella seconda colonna aggiuntiva: la somma dellla y e la y precedente, 
nella terza colonna aggiuntiva: il semiprodotto dei due valori delle due colonne precedenti

infine in coda all'ultima delle colonne aggiuntive eseguiamo la somma di tutti i termini della terza colonna aggiuntiva. Questo dovrebbe essere l'area del plinto. MA a questo punto, dato che avevamo gia dedicato una cella destinata a contenere l'area del poligono, potremmo mettere proprio lì questa somma.

Proverò ad aggiungere tutto ciò nel progetto del foglio anche se vi anticipo che, in vista delle operazioni necessarie per la determinazione delle coordinate del baricentro, è opportuno ricorrere a qualche codice che eviti di imbrattare il foglio con numeri che alla fine non interessa nemmeno presentare.

Ecco un primo passo:



Uploaded with ImageShack.us

Come potete vedere ho aggiunto le colonne che avevo descritto ed ho inserito una "geometria di lavoro" per poter controllare i risultati delle formule che via via inserisco.

qui annoto quanto segue:
- siamo solo agli inizi col semplice calcolo dell'area ed abbiamo gia una tabella con dati che tutto sommato sono praticamente inutili da presentare. A noi poco importano i calcoli intermedi ma importa solo l'area. Qui sarebbe pertanto utilissima una funzione che prenda in pasto quella tabella e che ci dia solo l'area (per adesso). Ma andiamo avanti. Aggiungo solamente che quando non conoscevo a fondo le potenzialita di excel o quando questo non era potente come adesso (e mi riferisco ai tempi in cui excel era dotato solo di un rudimentale linguaggio macro) non mi fermavo di certo di fronte alla mole di numeri che avrebbero accompagnato le mie relazioni. Poi risolvevo il problema facendo fare i conti in fogli diversi che poi non stampavo.
- abbiamo fornito una tabella di input, le coordinate certamente le abbiamo ricavate da uno schema grafico che magari abbiamo davanti, siamo anche certi di non aver commesso errori, tuttavia quella serie di numeri snocciolati in tabella sono aridi e nulla dicono della forma effettiva della poligonale. Sarebbe utile poter visualizzare la forma. Questo con scopi multipli tra cui il controllo in diretta di errori di digitazioni e la presentazione di un eleborato elegante. Farò questo inserendo un diagramma a dispersioni di punti.

- purtroppo l'area calcolata è errata. Questo è dovuto alla presenza di termini nelle colonne aggiuntive e nel primo rigo oltre l'ultima coppia di coordinate; basterebbe pertanto cancellare proprio questi elementi indesiderati per ottenere il risultato corretto. Ma questo cancellerebbe anche le formule ivi inserite e in un successivo uso dovremmo ricordarci di ripristinare le formule. Penso che questo sia poco accettabile e dovremo trovare una soluzione per superare questo problema.
Una soluzione sarebbe quella di imporre all'utilizzatore di posizionare il primo vertice della poligonale nell'origine del sistema di riferimento (il risultato sarebbe corretto, provare per credere). Questa soluzione non è poi tanto cattiva. In alternativa dovremo trovare una formula che dia risultato nullo se le coordinate o il numero sequenziale del vertice non sono dati.

 

afazio:
Passiamo adesso alla determinazione delle coordinate del baricentro della poligonale.

Da geometria delle masse sappiamo che le coordinate del baricentro sono pari a:


xc = Sy / A

yc = Sx / A

In cui si sono indicati con Sx ed Sy il momento statico rispetto agli omologhi assi mentre con A si è indicata l'area della poligonale (che gia abbiamo calcolato anche se ancora errata, ma la correggeremo poi)

Se non ricordo male Zax ha riportato le formule che danno, a partire dalla tabella delle coordinate dei vertici, Sx ed Sy.
Non voglio ricorrere alla lettura del post di zax e, non ricordandole a memoria ,intendo ricavarmele da solo.
Per questo considero nel quadrante positivo il generico lato della poligonale che va dal vertice "i" al vertice "i+1" con valori crescenti sia delle x che delle y (nel senso che il punto "i+1" sta a destra ed in alto del vertice "i") e questo per poter trovare una formula che non dipenda dal segno, cioè, una formula in cui il segno del risultato derivi solo da una diversa posizione reciproca dei vertici rispetto a quella da me assunta che è positiva.

Conviene che prepari una figura esplicativa.

Navigation

[0] Message Index

[#] Next page

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 
Go to full version