Il Bar dell'Ingegneria

Ci A Pi

« Older   Newer »
 
  Share  
.
  1. texitaliano64
        +1   +1   -1
     
    .
    Avatar

    Member

    Group
    Member
    Posts
    766
    Reputation
    +23

    Status
    Offline
    Ringrazio Zax2013, AFazio, GIaria per il loro contributo, oltre che i suggerimenti di Francesco.Coppola i quali mi hanno permesso di estendere il foglio al calcolo ed alla visualizzazione del diagramma del dominio di rottura anche alle travi in cap di qualsiasi forma in pressoflessione deviata.
    Brevemente vado ad illustrare le modifiche principali fatte al foglio di calcolo VerSectZax.
    Innanzitutto definiamo il legame costitutivo bilineare dell'acciaio di precompressione come da normativa EC2.
    7fzn
    Uploaded with ImageShack.us
    Il codice relativo è il seguente:
    CODICE
    ' --------------------------------------------------------------------------
    ' Nome funzione     : elast_plast_indefps(
    ' Scopo funzione    : Dal diagramma elasto-plastico lineare adimensionalizzato
    '                    ricava un fattore alfa, funzione della deformazione,
    '                    che moltiplicato per fydp da la effettiva tensione nei
    '                    trefoli
    ' Parametri formali: def=valore della deformazione dell'acciaio, fydp=tensione
    '                    di snervamento, Ep=modulo elastico dell'acciaio.
    ' Valore restituito: fattore alfa compreso tra 0 ed 1.xx
    ' Implementazione  : Novembre 2012
    ' Autore           : Tex
    ' --------------------------------------------------------------------------
    Private Function elast_plast_indefps(def As Double, fydp As Double, Ep As Double)
    'def --> deformazione della fibra di cls all'altezza del cavo.

    '1.15 < k < 1.35 pendenza del tratto plastico valori consigliati da normativa
    'cautelativamente usiamo k = 1.15
    Const k As Double = 1.15
    'euk = 0.035 deformazione di rottura 35 per mille
    Const euk As Double = 0.035
    Dim coeff As Double
    coeff = fydp / Ep
       If def >= coeff Then
           'elast_plast_indefps = 1#
           'Dim A As Double, b As Double
           'Dim A1 As Double, B1 As Double
           'A = (k - 1#) * fydp
           'b = euk - coeff
           'B1 = def - coeff
           'A1 = A * B1 / b
           'elast_plast_indefps = (fydp + A1) / fydp
           'ricomponiamo la funzione in un calcolo unico
           'elast_plast_indefps = ((fydp - def * Ep) * k + (def - euk) * Ep) / (fydp - euk * Ep)
           'dividiamo il tutto per Ep
           'elast_plast_indefps = ((fydp / Ep - def) * k + (def - euk)) / (fydp / Ep - euk)
           'assegnamo coeff=fydp/Ep da cui
           elast_plast_indefps = ((coeff - def) * k + (def - euk)) / (coeff - euk)
       Else
           elast_plast_indefps = def * Ep / fydp
       End If

    End Function

    Andiamo a definire inoltre una struttura dati per contenere le coordinate dell'acciaio da precompressione, in questo caso per comodità estendiamo la struttura preesistente delle barre di armatura ordinaria:
    CODICE
    ' -------------------------------------------------------------------------- '
    ' Struttura dati in cui sono definiti i dati delle singole barre di armatura '
    ' presenti nella sezione                                                     '
    ' -------------------------------------------------------------------------- '
    Public Type armature_sezione
      af() As Double                       ' area della barra di armatura o del trefolo (1 To NMaxArm)
      X() As Double                        ' coordinata x della barra o del trefolo (1 To NMaxArm)
      Y() As Double                        ' coordinata y della barra o del trefolo (1 To NMaxArm)
      omogarm() As Double                  ' coefficiente di omogeneizzazione barre o trefoli (per verifiche SLE) (1 To NMaxArm)
      numarm As Integer                    ' numero di barre e trefoli per l'intera sezione
      fyd() As Double                      ' Tensione snervamento barre o trefoli
      sigma_sp0() As Double                ' Tensione dei trefoli depurata dalle perdite
      def_prec() As Double                 ' deformazione trefolo dovuto alla precompressione depurata dalle perdite
    End Type
    ' -------------------------------------------------------------------------- '

    Bisogna definire la tensione di tesatura dei trefoli sigmaspi, per brevità diamo una percentuale di perdita del 22.4% a tempo infinito.
    Per un calcolo più accurato delle perdite si rimanda ai testi di normativa, ed alla bibliografia esistente.
    Per lo stato deformativo iniziale dovuto alla precompressione scriviamo questa struttura:
    CODICE
    armp.numarm = NMaxArmp
    For i = 1 To n_cavi_sez
       armp.X(i) = cx(i)               '[mm]
       armp.Y(i) = cy(i)               '[mm]
       armp.af(i) = Asp(i)             'Af [mm2]
       armp.omogarm(i) = nsp - 1#      'tengo conto del foro nel cls
       armp.fyd(i) = fyd / gammasp     'Tensione snervamento trefoli di progetto
       armp.sigma_sp0(i) = sigma_preteso_ultimo(i) - sigma_perdite_ultimo(i)
       armp.def_prec(i) = -armp.sigma_sp0(i) / E_armp
    Next

    Infine calcolo N dovuto alle forze di precompressione sommato a N dovuto ai carichi esterni da applicare alla sezione.
    CODICE
    Public Sub Calcolo_precompressione(ByVal N_ As Double, ByVal Mx_ As Double, ByVal My_ As Double, _
                                       Nd As Double, Mx As Double, My As Double)

       'Caratteristiche di sollecitazione dovute ai carichi esterni.
       'N_  sforzo normale (compressione positiva) [N]
       'Mx_ momento flettente in direzione x [N*mm]
       'My_ momento flettente in direzione y [N*mm]
       
       'nd = N_ + N_p   --> sforzo assiale per carichi assiali + precomp.
       'Mx = Mx_ + Mx_p --> momento per carichi verticali + momento precomp.
       'My = My_ + My_p --> momento per carichi orizzontali + momento precomp.
             
       ReDim sigma_preteso_ultimo(0 To n_cavi_sez) As Double
       ReDim sigma_perdite_ultimo(0 To n_cavi_sez) As Double
       Dim i As Integer
             
       'Tensione iniziale di tesatura
       For i = 1 To n_cavi_sez
           sigma_preteso(i) = sigma_spi
       Next i
             
       'Tensioni nei cavi amplificate (o ridotte)
       Dim g_prec As Double
       g_prec = 1#
       For i = 1 To n_cavi_sez
           sigma_preteso_ultimo(i) = sigma_preteso(i) * g_prec
       Next i
                 
       '*****************************************************************
       'Determinazione della sollecitazione dovuta a precompressione
       '*****************************************************************
       
       Dim N_p As Double       'Sforzo normale dovuto alle forze di precompressione
       Dim Mx_p As Double      'Momento lungo x "
       Dim My_p As Double      'Momento lungo y "
       Dim sigma_sp0 As Double 'Tensione dei trefoli depurata dalle perdite
       
       N_p = 0#: Mx_p = 0#: My_p = 0#
       
       For i = 1 To n_cavi_sez
           sigma_perdite_ultimo(i) = (perdite / 100#) * sigma_preteso(i)
           sigma_sp0 = sigma_preteso_ultimo(i) - sigma_perdite_ultimo(i)
           N_p = N_p + sigma_sp0 * Asp(i)
           Mx_p = Mx_p - sigma_sp0 * Asp(i) * (ygO - cy(i))
           My_p = My_p + sigma_sp0 * Asp(i) * (xgO - cx(i))
       Next i
       
       Nd = N_ + N_p    'sforzo assiale per carichi assiali + precomp.
       Mx = Mx_ + Mx_p  'momento per carichi verticali + momento precomp.
       My = My_ + My_p  'momento per carichi orizzontali + momento precomp.
     
    End Sub

    Integriamo la funzione risult_traz tenendo conto della deformazione precedentemente assegnata ai trefoli.
    CODICE
    ' --------------------------------------------------------------------------
    ' Nome sub          :risult_traz(
    ' Scopo funzione   : Calcola la risultante di trazione nella sezione per da-
    '                    to posizionamento dell'asse neutro, ed anche il suo
    '                    punto di applicazione.
    '                    ATTENZIONE per determinare forze derivanti dalle armatu-
    '                    o dai profili metallici, la procedura utilizza le va-
    '                    riabili globali: E_arm,E_prof,fyd_arm,fyd_prof
    ' Parametri formali: Struttura dati con tutti i poligoni che costituiscono la
    '                    sezione, struttura dati con tutte le armature della se-
    '                    zione. ymax=massima ordinata della sezione in cls,
    '                    yamin=minima ordinata delle barre di armatura, yn=ordi-
    '                    nata dell'asse neutro, struttura dati con le deforma-
    '                    zioni limite a rottura
    ' Valore restituito: Struttura dati con risultante e punto di applicazione
    ' Implementazione  : Luglio 2011
    ' Autore           : Zax2010
    ' traduzione in VBA : Afazio Settembre 2012
    ' modifiche         : Giuseppe Iaria Ottobre 2012
    ' modifiche         : Tex Dicembre 2012
    ' --------------------------------------------------------------------------

    Private Function risult_traz(ByRef polic() As poligono_sezione, armco As armature_sezione, armcp As armature_sezione, deform As deform_sezione, _
                   ymax As Double, yamin As Double, yn As Double) As risultante_n
    ......
    ......
    For k = 1 To armcp.numarm
         If armcp.Y(k) > yn Then GoTo continua3   'esclude le armature compresse
         def = deform.epsa + (deform.epsb - deform.epsa) * (ymax - armcp.Y(k)) / (ymax - yamin)
         pressione = -elast_plast_indefps(Abs(def + armcp.def_prec(k)), armcp.fyd(k), E_armp) * armcp.fyd(k)
         forza = pressione * armcp.af(k)
         risult_traz.n = risult_traz.n + forza
         Scx = Scx + forza * armcp.Y(k)
         Scy = Scy + forza * armcp.X(k)
    continua3:
    Next

    Lo stesso facciamo con risult_compr.
    CODICE
    ' --------------------------------------------------------------------------
    ' nome sub          : risult_compr(
    ' Scopo funzione   : Calcola la risultante di compressione nella sezione per
    '                    dato posizionamento dell'asse neutro, ed anche il suo
    '                    punto di applicazione
    '                    ATTENZIONE per determinare forze derivanti dalle armatu-
    '                    o dai profili metallici, la procedura utilizza le va-
    '                    riabili globali: E_arm,E_prof,fyd_arm,fyd_prof
    ' Parametri formali: Struttura dati con tutti i poligoni che costituiscono la
    '                    sezione, struttura dati con tutte le armature della se-
    '                    zione. ymax=massima ordinata della sezione in cls,
    '                    yamin=minima ordinata delle barre di armatura, yn=ordi-
    '                    nata dell'asse neutro, struttura dati con le deforma-
    '                    zioni limite a rottura
    ' Valore restituito: Struttura dati con risultante e punto di applicazione
    ' Implementazione   : Luglio 2011
    ' traduzione in VBA : Afazio Settembre 2012
    ' Autore            : Zax2010
    ' modifiche         : Giuseppe Iaria Ottobre 2012
    ' modifiche         : Tex Dicembre 2012
    ' --------------------------------------------------------------------------
    Private Function risult_compr(ByRef polic() As poligono_sezione, armco As armature_sezione, armcp As armature_sezione, _
                             deform As deform_sezione, ymax As Double, yamin As Double, yn As Double) As risultante_n
    .....
    .....
    For k = 1 To armcp.numarm
       If armcp.Y(k) < yn Then GoTo continua7         'le armature sono tese e passa oltre
       def = deform.epsa + (deform.epsb - deform.epsa) * (ymax - armcp.Y(k)) / (ymax - yamin)
       pressione = elast_plast_indefps(def + armcp.def_prec(k), armcp.fyd(k), E_armp) * armcp.fyd(k)
       forza = pressione * armcp.af(k)
       risult_compr.n = risult_compr.n + forza
       Scx = Scx + forza * armcp.Y(k)
       Scy = Scy + forza * armcp.X(k)
    continua7:
    Next


    Edited by texitaliano64 - 18/1/2014, 13:27
     
    Top
    .
283 replies since 18/1/2014, 10:24   14202 views
  Share  
.