dominio3

Oggi forniamo un codice che consente di calcolare il momento resistente di una sezione per un fissato valore dello sforzo normale. Sostanzialmente è un codice VBA da inserire in un foglio Excel. La procedura è la seguente:

  1. Aprire un nuovo foglio Excel, e quindi aprire la pagina progetto di Visual Basic;
  2. inserire un nuovo modulo;
  3. copiare ed incollare il codice qui sotto;
  4. tornare nel foglio Excel;
  5. nella voce inserisci funzione trovate la nuova funzione tra quelle definite dall’utente.

La procedura segue le indicazioni contenute in “Verifica e progetto allo stato limite ultimo di pilastri in c.a. a sezione rettangolare: un metodo semplificatoAurelio Ghersi e Marco Muratore.

Le resistenze di calcolo dell’acciaio e del cls sono quelle definite nel DM08. In particolare:
fyd = fyk/gamma.s
fcd =alfa.cc*fck/gamma.c

Ecco il codice da inserire:

Public Function VSezRettSLU(B As Double, H As Double, c As Double, Af As Double, fyd As Double, fcd As Double, Ned As Double, flag As Double) As Variant
‘La funzione calcola il momento resistente
‘ di una sezione rettangolare in c.a. con armatura doppia e simmetrica
‘ per fissato sforzo normale di calcolo Ned
‘Argomenti della funzione sono:
‘B- base della sezione (mm)
‘H- altezza della sezione (mm)
‘C- copriferro (mm)
‘Af- area armatura superiore ed inferiore (mmq)
‘fyd – resistenza di calcolo dell’acciaio (MPa)
‘fyc – resistenza di calcolo del cls (MPa)
‘Ned- sforzo normale normale di calcolo (KN)positivo se di compressione
‘flag- parametro di controllo in base al quale la funzione restituisce il valore:

‘flag=1 Ns.Rd = resistenza di calcolo per trazione pura in KN
‘flag=2 Ncc.Rd = resistenza di calcolo per compressione pura in KN
‘flag=3 Momento di rottura per fissato sforzo normale in KN*m
‘Se viene fornito un flag diverso dai precedenti, viene impostato a 3

‘La funzione effettua minimi controlli
‘ e nel caso di geometria nulla o dati privi di senso, restituisce la stringa N.B.

Dim Ncc_Rd As Double

Dim Nc_Rd As Double
Dim Mc_Rd As Double

Dim Ns_Rd As Double
Dim Ms_Rd As Double

Dim Mrd As Double
Dim q As Double  ‘rigo aggiunto

‘—– controlli di validita’ dei dati——————–
If flag < 1 Or flag > 3 Then
flag = 3
End If

If B <= 0 Or H <= 0 Or Af <= 0 Or c <= 0 Or fyd <= 0 Or fcd <= 0 Then
‘ controlla dimensioni negative o nulle della sezione
VSezRettSLU = “N.B.”
Exit Function
End If

Ned = Ned * 1000

Ncc_Rd = B * H * fcd + 2 * Af * fyd

Nc_Rd = 289 * B * H * fcd / 594
Mc_Rd = 289 * B * H ^ 2 * fcd / 2376

Ns_Rd = -2 * Af * fyd
Ms_Rd = Af * (H – 2 * c) * fyd

Select Case Ned

Case Is < Ns_Rd
Mrd = 0
Case Ns_Rd To 0
Mrd = Ms_Rd * (1 + Ned / Ns_Rd)
Case 0 To Nc_Rd
Mrd = (Mc_Rd * (1 – ((Ned – Nc_Rd) / Nc_Rd) ^ 2) + Ms_Rd)
Case Is > Ncc_Rd
Mrd = 0
Case Nc_Rd To Ncc_Rd
q = 1 + (Nc_Rd / (Nc_Rd + Ns_Rd)) ^ 2
Mrd = (Mc_Rd – Ms_Rd) * (1 – ((Ned – Nc_Rd) / (Nc_Rd + Ns_Rd)) ^ q) ‘ corretto Mc – rd in Mc_Rd

End Select

Select Case flag
Case 1
VSezRettSLU = Ns_Rd / 1000
Case 2
VSezRettSLU = Ncc_Rd / 1000
Case 3
VSezRettSLU = Mrd / 1000000

End Select

End Function

Si ringrazia l’ing. Afazio per il contributo.

22 thoughts on “Verifica e progetto di pilastri in c.a. con metodo semplificato”
  1. Le virgolette che precedono la parola Public non van messe

    inoltre il valore di fcd e’ quello previsto nel DM08 che pertanto e’ gia comprensivo del coefficiente alfa, denominato alfa.cc nel DM.

    fcd=alfa.cc*fck/gamma.c

    Afazio

  2. @Gennaro

    Si, quando sei in ambiente programmazione di visualBasic per excel, devi aggiungere un nuovo modulo al progetto che ha lo stesso titolo del tuo file. Lo aggiungi premendo col destro in una qualsiasi voce del progetto.

    Afazio

  3. Ma funziona? Ho implementato un pilastro b=350 mm, h=400 mm, Af = 600 mmq, fyd=390MPa, fcd=14MPa, C=20 mm. Ottengo questi risultati
    con NEd =-100kN viene MRd=102.24 KNm
    con NEd =0kN viene MRd=84.24 KNm
    con NEd =+100kN viene MRd=103.19 KNm
    cioè il dominio presenta un minimo per NEd=0.

  4. Ho controllato e non funziona. E si capisce anche leggendo il listato che non può funzionare. Nel CASE per Ned compreso tra Ns_Rd e 0 l’espressione per il momento ultimo è Mrd = Ms_Rd * (1 + Ned / Ns_Rd). Questa espressione per Ned = Ns_Rd deve assumere valore 0 (la sezione collassa per sola trazione). Invece siccome Ns_Rd è stato definito negativo (Ns_Rd = -2 * Af * fyd) il valore che viene fuori per Mrd è 2*Ms_Rd. Conviene definire Ns_RD = 2*Af*fyd come indicato nell’articolo di Ghersi. Per distinguere i CASE si può porre il segno meno davanti a Ns_Rd (ad es. nel primo caso: Case Is < -Ns_Rd).
    Oppure andrebbe cambiata la formula del Mrd ponendo un segno meno davanti a Ned/Ns_Rd ma io lascerei la formula come è stata ricavata dall'autore.
    Inoltre ci sono altri due errori.
    Nella espressione di Mrd per Ned tra Nc_Rd e Ncc_Rd il primo fattore è (Mc_Rd + Ms_Rd) e non (Mc_Rd – Ms_Rd). L'altro errore è che nella stessa espressione, della quantità elevata a q va prima calcolato il valore assoluto. Quindi va anteposto Abs in VB.
    Fatte queste modifiche il programma va alla grande!!
    Saluti,
    Francesco Durante

  5. Ho abbandonato da parecchio tempo questa funzione: l’ho scritta e lasciata qui per essere sottoposta al controllo di eventuali utilizzatori ed alle correzione di inevitabili bug/errori da parte di volenterosi.
    Non ho piu’ nè tempo nè voglia di controllare quanto da te segnalato dato che successivamente mi sono dedicato ad una funzione che mi determina Mrd in maniera esatta (e non approssimata come fa questa in discussione) e che preferisco dedicare i miei sforzi piu’ alla nuova funzione che non alla vecchia, purtuttavia se hai verificato che con le correzioni che proponi la funzione va alla grande, ti esorto a pubblicare in queste pagine la versione corretta affinche possa essere utilizzata da altri.
    Grazie.

    Afazio.

    @Lexatus: in merito alla mia reiscrizione su ingforum…. non ci penso proprio ed anzi me ne tengo lontano. Non vado nemmeno a spulciare o a curiosare. Ritengo di non essere meritevole.
    Un caro saluto.

  6. @ Francesco Durante:
    da una veloce lettura evidenzio quanto segue:
    non e’ affatto vero che per Ned compreso tra Ns_Rd e 0 il momento di rottura deve essere nullo. Il momento di rottura, invece, ha un valore non nullo e lo si puo’ facilmente desumere dal tipico dominio di rottura.
    Il momento di rottura e’ nullo solo nei due punti di intersezione del dominio con l’asse delle ascisse (cioè con l’asse degli sforzi normali).

  7. @ Francesco Durante:
    sempre dalla veloce lettura:
    la parte in cui viene determinato l’esponete q è:
    Case Nc_Rd To Ncc_Rd
    q = 1 + (Nc_Rd / (Nc_Rd + Ns_Rd)) ^ 2</b)

    la funzione esegue questa parte di codice solo se Ned è compreso tra i due valori Nc_Rd ed Ncc_Rd che sono entrambi valori positivi. Per questo motivo non necessita sottoporre i valori alòla funzione ABS di VBA

  8. @Tutti

    spero di riuscire a trovare il tempo per postare la nuova funzione (in realtà sono piu’ funzioni) per la determinazione di Mrd per:
    sezione rettangolare
    sezione trapezia
    sezione circolare
    sezione a T

    con armatura doppia ed asimmetrica.

    Con l’occasione ricordo che la funzione oggetto del presente 3d e’ applicabile solo a sezioni rettangolari con armatura doppia e simmetrica.

    saluti.

    Afazio alias gio’

  9. Caro Giovanni, quando vuoi pubblicare qualcosa non esitare. I tuoi lavori sono sempre ottimi. Anche la funzione di cui parli sarebbe interessante.

    In merito ad IngForum, si, ti capisco. Ad ogni modo, ogni tanto mi piacerebbe scambiare due chiacchiere con te. Frequenti altri forum, tipo quello su Bebnet?

  10. Ho abbandonato anche quello. Troppo tacco e punta per i miei gusti. Io preferisco fumare le mie sigarette in libertà. Anche di quello ritengo di non esserne meritevole.
    Quando hai voglia di comunicare con me hai sempre la mia mail personale. Non ho risposto alla tua ultima perchè pensavo di risponderti qui. Ma sappi che ogni tuo contatto è gradito.

    ciao

  11. @Afazio
    Premetto che sono grato a chi ha organizzato questo forum e a coloro che vi pubblicano commenti o strumenti. Ero alla ricerca di un algoritmo che permettesse di implementare la verifica dei pilastri in excel dato che non mi piace lavorare con software ingessati che sulla carta fanno tutto e poi all’atto pratico rimani bloccato perchè hanno un menu vecchio; o, il che è anche peggio, ti sputano fuori risultati che non riesci a controllare. Per cui ben venga questo blog che è l’unico che ho trovato che rispondeva al mio bisogno. Semplicemente avevo visto che qualcosa non andava e, nello sprito del forum, ho cercato di dare il mio contributo.
    Entrando nel merito del mio intervento, non ho detto che “per Ned compreso tra Ns_Rd e 0 il momento di rottura deve essere nullo”. Invece ho detto che “per Ned = Ns_Rd deve assumere valore 0”.
    Per quanto riguarda la presenza del valore assoluto nell’espressione di q effettivamente avevo verificato che non comportava errori, ma ritengo che possa essere applicato dato che l’autore ha ritenuto di farlo.
    Per quanto riguarda le modifiche che ho apportato penso che siano già chiare dal mio precedente post. Se qualcuno lo ritiene comunque posterò il codice.
    Per quanto riguarda il tuo codice per la verifica esatta dei pilastri anche con armature asimmetriche e per sezioni dalla geometria più complessa della rettangolare, ti invito caldamente a pubblicarlo perchè farai un grande favore innanzitutto a me, e poi a tutti i fruitori del forum dato che strumenti di questo tipo non si trovano in giro.
    Cordiali saluti a tutti,
    Francesco Durante

  12. @ Francesco Durante.
    Tranquillo, non ho affatto inteso i tuoi appunti come fosse una critica negativa, anzi ben vengano. Ma come già accennato ho abbandonato da parecchio quella funzione ed il controllo di quanto da te annotato mi veniva alquanto difficile. In effetti mancherebbe nel primo case il segno di uguaglianza col quale si colmerebbe anche il caso specifico da te segnalato.
    Per quanto riguarda la nuova funzione, intanto inizio qui a trascrivere la prima invitando il gestore di questo blog a spostarla in apposito 3d dove aggiungerei le parti a seguire.

    Function arcCos(numero As Double) As Double
    arcCos = Atn(-numero / Sqr(-numero * numero + 1)) + 2 * Atn(1)
    End Function

    Function CalcEpsilon_rottura(H As Double, dmin As Double, _
    di As Double, delta As Double, _
    Optional epsSmax As Double = 0.0675, _
    Optional epsCmax As Double = 0.0035, _
    Optional epsCrif As Double = 0.002) As Double
    ‘Restituisce la deformazione limite per il calcolo del dominio MN funzione dei parametri immessi
    ‘ Attenzione nell’uso: valori positivi di epsilon per il cls non hanno alcun senso! Controllare la funzione SigmaC
    ‘Parametri:
    ‘ h=altezza sezione (mm)
    ‘ dmin = copriferro superiore o inferiore (mm)
    ‘ di = distanza della fibra di cui si calcola epsilon dall’estremità superiore della sezione (mm)
    ‘ delta = coefficiente di campo (da 0 a 5 per i momenti positivi che tendono le fibre inferiori,
    ‘ da 5 a 10 per i momenti negativi che tendono le fibre superiori)
    ‘ epsSmax = deformazione limite dell’acciaio
    ‘ epsCmax = deformazione limite del cls
    ‘ epsCrif = deformazione limite del cls per compressione semplice

    Dim x0 As Double ‘ variabile di appoggio

    Select Case delta
    Case 0 To 1
    CalcEpsilon_rottura = epsSmax – (H – dmin – di) / (H – dmin) * (epsSmax * delta)
    Case 1 To 2
    CalcEpsilon_rottura = epsSmax – (H – dmin – di) / (H – dmin) * (epsSmax + epsCmax * (delta – 1))
    Case 2 To 3
    CalcEpsilon_rottura = -epsCmax + di / (H – dmin) * (epsCmax + epsSmax * (3 – delta))
    Case 3 To 4
    CalcEpsilon_rottura = epsCmax * (-1 + di * (4 – delta) / (H – dmin) + di * (delta – 3) / H)
    Case 4 To 5
    x0 = (epsCmax – epsCrif) * H / epsCmax
    CalcEpsilon_rottura = -epsCrif + epsCrif * (5 – delta) * (di – x0) / (H – x0)
    Case 5 To 6
    CalcEpsilon_rottura = -(6 – delta) * epsCrif – (delta – 5) * epsCmax * di / H
    Case 6 To 7
    CalcEpsilon_rottura = -epsCmax * ((7 – delta) * dmin * (H – di) / (H * (H – dmin)) + (di – dmin) / (H – dmin))
    Case 7 To 8
    CalcEpsilon_rottura = -epsCmax * (di – dmin) / (H – dmin) + (delta – 7) * epsSmax * (H – di) / (H – dmin)
    Case 8 To 9
    CalcEpsilon_rottura = (epsSmax + (9 – delta) * epsCmax) * (H – di) / (H – dmin) – (9 – delta) * epsCmax
    Case 9 To 10
    CalcEpsilon_rottura = (10 – delta) * epsSmax * (H – di) / (H – dmin) + (delta – 9) * epsSmax
    Case Else
    CalcEpsilon_rottura = 0
    End Select

    End Function

    Il commento a questa funzione e la illustrazione di cio’ che fa ed a cosa servirà nell’intero codice, saranno aggiunti nel nuovo 3d.

  13. Cari,
    vi sto seguendo e questi scambi sono utili. Mi scuso con Francesco Durante se il tono del primo intervento è sembrato un po’ “secco”, ma la funzione è stata discussa su IngForum (almeno così ricordo) e non sembravano esserci errori (ma, alla fine, ci sono o no? Non ho avuto modo di seguire con particolare attenzione, conto di farlo nel weekend).

    @Afazio
    Si, ti conosco bene. Seguire i tuoi interventi mette allegria, oltre al fatto che c’è sempre da imparare qualcosa.
    Pensandoci, potremmo farlo da noi un forum…

    Comunque, adesso sono impegnato con una scadenza, ma entro domani conto di fare un articolo ad hoc sulla tua funzione, in modo che possa essere diffusa e discussa. Grazie mille, come al solito, per i tuoi contributi.

  14. Essendo interessato all’algoritmo, in particolare in relazione alla valutazione del momento resistente dei pilastri, pertanto in regime di pressoflessione e con armatura doppia e simmetrica, ho provveduto a sviluppare il codice relativo. Ho anche documentato una casistica interessante di azioni e riportato i risultati ottenuti e quelli attesi, praticamente coincidenti. Il codice è scritto in VB ed associato all’object timer, per un uso alternativo è sufficiente eliminare la prima ed ultima istruzione. Ovviamente declino qualsiasi responsabilità inerente l’utilizzazione del codice, che richiede in ogni caso una migliore documentazione, era mia intenzione semplicemente partecipare alla discussione. Saluti, Pavi

    Private Sub Timer1_Timer()

    ‘ Note

    ‘ Il modulo utilizza una funzione originariamente progettata per il calcolo semplificato del momento resistente di una sezione ret-
    ‘ tangolare in c.a. con armatura doppia e simmetrica per sforzo normale assegnato Nrd. Il codice è riportato all’indirizzo:

    http://strutturisti.wordpress.com/2009/04/03/verifica-e-progetto-di-pilastri-in-ca-con-metodo-semplificato/

    ‘ Successivamente è stato direttamente confrontato con il metodo proposto dal prof.Ghersi nel documento “Verifica e progetto allo
    ‘ stato limite ultimo di pilastri in c.a. a sezione rettangolare: un metodo semplificato” da cui deriva. Sono anche state valutate
    ‘ le correzioni riportate nella stessa pagina Web.
    ‘ Nella documentazione della funzione si precisa che le resistenze di calcolo dell’acciaio e del cls sono quelle definite nel DM 08.
    ‘ e che pertanto il valore di fcd e’ gia comprensivo del coefficiente alfa, denominato alfa.cc nel DM. In particolare:

    ‘ fyd = fyk / gamma.s
    ‘ fcd = alfa.cc * fck / gamma.c

    ‘ Al contrario, nello sviluppo dell’algoritmo ho utilizzato per alfa il valore riportato nella letteratura scientifica, pari a 0.85
    ‘ in accordo ai valori di fcd e fyd assunti negli esempi del calcolo di verifica:

    ‘ fyd = 374 ‘ resistenza di calcolo dell’acciaio [MPa]
    ‘ fcd = 13 ‘ resistenza di calcolo del cls [MPa]

    ‘ Prove effettuate, osservazioni e conclusioni

    ‘ Le prove sono state eseguite aggiornando per tentativi le armature fino a rendere il valore del momento resistente pressochè pari
    ‘ a quello sollecitante nelle verifiche a pressoflessione retta con il metodo proposto dagli autori Vitaliani, Scotta, Saetta. Sono
    ‘ stati esaminati i casi seguenti:

    ‘ Caso 1

    ‘ B = 250 ‘ base della sezione [mm]
    ‘ h = 600 ‘ altezza della intera sezione [mm]
    ‘ c = 40 ‘ copriferro[mm]
    ‘ Af = 1602 ‘ armatura per lato (modalità doppia e simmetrica) [mmq]
    ‘ fyd = 374 ‘ resistenza di calcolo dell’acciaio [MPa]
    ‘ fcd = 13 ‘ resistenza di calcolo del cls [MPa]
    ‘ Nrd = 1000 ‘ sforzo normale di calcolo [kN] positivo se di compressione
    ‘ alfa = 0.85 ‘ coefficiente che esprime il legame costitutivo del cls
    ‘ flag = 3 ‘ parametro di controllo in base al quale la funzione restituisce il valore:

    ‘ risulta Mr = 403 [kN.m] contro 400

    ‘ Caso 2

    ‘ B = 250 ‘ base della sezione [mm]
    ‘ h = 600 ‘ altezza della intera sezione [mm]
    ‘ c = 40 ‘ copriferro[mm]
    ‘ Af = 2185 ‘ armatura per lato (modalità doppia e simmetrica) [mmq]
    ‘ fyd = 374 ‘ resistenza di calcolo dell’acciaio [MPa]
    ‘ fcd = 13 ‘ resistenza di calcolo del cls [MPa]
    ‘ Nrd = -100 ‘ sforzo normale di calcolo [kN] positivo se di compressione
    ‘ alfa = 0.85 ‘ coefficiente che esprime il legame costitutivo del cls
    ‘ flag = 3 ‘ parametro di controllo in base al quale la funzione restituisce il valore

    ‘ risulta Mr = 398 [kN.m] contro 400

    ‘ Caso 3

    ‘ B = 250 ‘ base della sezione [mm]
    ‘ h = 600 ‘ altezza della intera sezione [mm]
    ‘ c = 40 ‘ copriferro[mm]
    ‘ Af = 2683 ‘ armatura per lato (modalità doppia e simmetrica) [mmq]
    ‘ fyd = 374 ‘ resistenza di calcolo dell’acciaio [MPa]
    ‘ fcd = 13 ‘ resistenza di calcolo del cls [MPa]
    ‘ Nrd = 3200 ‘ sforzo normale di calcolo [kN] positivo se di compressione
    ‘ alfa = 0.85 ‘ coefficiente che esprime il legame costitutivo del cls
    ‘ flag = 3 ‘ parametro di controllo in base al quale la funzione restituisce il valore

    ‘ risulta Mr = 103 [kN.m] contro 100

    ‘ Caso 4

    ‘ B = 250 ‘ base della sezione [mm]
    ‘ h = 600 ‘ altezza della intera sezione [mm]
    ‘ c = 40 ‘ copriferro[mm]
    ‘ Af = 822 ‘ armatura per lato (modalità doppia e simmetrica) [mmq]
    ‘ fyd = 374 ‘ resistenza di calcolo dell’acciaio [MPa]
    ‘ fcd = 13 ‘ resistenza di calcolo del cls [MPa]
    ‘ Nrd = 2200 ‘ sforzo normale di calcolo [kN] positivo se di compressione
    ‘ alfa = 0.85 ‘ coefficiente che esprime il legame costitutivo del cls
    ‘ flag = 3 ‘ parametro di controllo in base al quale la funzione restituisce il valore

    ‘ risulta Mr = 7 [kN.m] contro 0

    ‘ Caso 5

    ‘ B = 250 ‘ base della sezione [mm]
    ‘ h = 600 ‘ altezza della intera sezione [mm]
    ‘ c = 40 ‘ copriferro[mm]
    ‘ Af = 3085 ‘ armatura per lato (modalità doppia e simmetrica) [mmq]
    ‘ fyd = 374 ‘ resistenza di calcolo dell’acciaio [MPa]
    ‘ fcd = 13 ‘ resistenza di calcolo del cls [MPa]
    ‘ Nrd = 0 ‘ sforzo normale di calcolo [kN] positivo se di compressione
    ‘ alfa = 0.85 ‘ coefficiente che esprime il legame costitutivo del cls
    ‘ flag = 3 ‘ parametro di controllo in base al quale la funzione restituisce il valore

    ‘ risulta Mr = 599 [kN.m] contro 600

    ‘ Argomenti della funzione:

    ‘ B base della sezione [mm]
    ‘ H altezza della intera sezione [mm]
    ‘ C copriferro [mm]
    ‘ Af armatura superiore ed inferiore intesa per lato in modalità doppia e simmetrica [mmq]
    ‘ fyd resistenza di calcolo dell’acciaio [MPa]
    ‘ fyc resistenza di calcolo del cls [MPa]
    ‘ Ned sforzo normale di calcolo [kN] positivo se di compressione
    ‘ alfa coefficiente che esprime il legame costitutivo del cls

    ‘ flag parametro di controllo in base al quale la funzione restituisce il valore:

    ‘ flag = 1: Ns.Rd = resistenza di calcolo per trazione pura [kN]
    ‘ flag = 2: Ncc.Rd = resistenza di calcolo per compressione pura [kN]
    ‘ flag = 3: Momento di rottura per fissato sforzo normale [kN.m]

    ‘ Se viene fornito un flag diverso dai precedenti, viene impostato a 3

    ‘ La funzione effettua minimi controlli nel caso di geometria nulla o dati privi di senso
    Dim Ncc_Rd As Double
    Dim Nc_Rd As Double
    Dim Mc_Rd As Double
    Dim Ns_Rd As Double
    Dim Ms_Rd As Double
    Dim Mrd As Double
    Dim q As Double

    ‘ Assegnazione variabili
    B = 250 ‘ base della sezione [mm]
    H = 600 ‘ altezza della intera sezione [mm]
    c = 40 ‘ copriferro[mm]
    Af = 3085 ‘ armatura per lato (modalità doppia e simmetrica) [mmq]
    fyd = 374 ‘ resistenza di calcolo dell’acciaio [MPa]
    fcd = 13 ‘ resistenza di calcolo del cls [MPa]
    nrd = 0 ‘ sforzo normale di calcolo [kN]positivo se di compressione
    alfa = 0.85 ‘ coefficiente che esprime il legame costitutivo del cls
    flag = 3 ‘ parametro di controllo in base al quale la funzione restituisce il valore:

    ‘ Risultati associati al flag

    ‘ flag = 1: resistenza di calcolo per trazione pura [kN]
    ‘ flag = 2: resistenza di calcolo per compressione pura [kN]
    ‘ flag = 3: momento di rottura per fissato sforzo normale [kN*m]

    ‘ controlli di validità dei dati
    If flag 3 Then
    flag = 3
    End If

    If B <= 0 Or H <= 0 Or Af <= 0 Or c <= 0 Or fyd <= 0 Or fcd <= 0 Then ' controllo congruenza dati
    Stop
    End If

    nrd = nrd * 1000

    Nc_Rd = 289 * B * alfa * H * fcd / 594
    Mc_Rd = 289 * B * H ^ 2 * alfa * fcd / 2376

    Ns_Rd = 2 * Af * fyd
    Ms_Rd = Af * (H – 2 * c) * fyd

    ' casi valutati

    ' 1 – Nrd minore di 0
    ' 2 – Nrd compreso tra 0 e Nc_Rd
    ' 3 – Nrd maggiore di Nc_Rd

    If nrd = 0 And nrd = Nc_Rd Then caso = 3

    Select Case caso

    Case 1
    Mrd = Ms_Rd * (1 + nrd / Ns_Rd)

    Case 2
    Mrd = (Mc_Rd * (1 – ((nrd – Nc_Rd) / Nc_Rd) ^ 2) + Ms_Rd)

    Case 3
    q = 1 + (Nc_Rd / (Nc_Rd + Ns_Rd)) ^ 2
    Mrd = (Mc_Rd + Ms_Rd) * (1 – (Abs((nrd – Nc_Rd) / (Nc_Rd + Ns_Rd))) ^ q)

    End Select

    Select Case flag

    Case 1
    VSezRettSLU = Int(Ns_Rd / 1000)

    Case 2
    VSezRettSLU = Int(Ncc_Rd / 1000)

    Case 3
    VSezRettSLU = Int(Mrd / 1000000)

    End Select

    ‘ VSezRettSLU è il valore richiesto

    End Sub

  15. non so perchè ma con il copia e incolla mi ha modificato un’istruzione e ne ha omesse due:

    ‘ casi valutati

    ‘ 1 – Nrd minore di 0
    ‘ 2 – Nrd compreso tra 0 e Nc_Rd
    ‘ 3 – Nrd maggiore di Nc_Rd

    If nrd = 0 And nrd = Nc_Rd Then caso = 3

    Select Case caso

    se qualcuno ha i privilegi dell’admin potrebbe effettuare direttamente le correzioni ed eliminare questo messaggio. Pavi

Leave a Reply

Your email address will not be published. Required fields are marked *