diff options
Diffstat (limited to 'Connections/Shear/Finplate/finPlateCalc.py')
-rw-r--r-- | Connections/Shear/Finplate/finPlateCalc.py | 240 |
1 files changed, 240 insertions, 0 deletions
diff --git a/Connections/Shear/Finplate/finPlateCalc.py b/Connections/Shear/Finplate/finPlateCalc.py new file mode 100644 index 0000000..7a8acc9 --- /dev/null +++ b/Connections/Shear/Finplate/finPlateCalc.py @@ -0,0 +1,240 @@ +''' +Created on 07-Aug-2014 + +@author: subhrajit +''' + +import math +from model import * +from PyQt4.Qt import QString +import logging +flag = 1 +logger = None + +def module_setup(): + + global logger + logger = logging.getLogger("osdag.finPlateCalc") + +module_setup() + +def finConn(uiObj): + global flag + global logger + '''(Dictionary) --> Dictionary + ''' + + beam_sec = uiObj['Member']['beamSection'] + column_sec = uiObj['Member']['columSection'] + connectivity = uiObj['Member']['connectivity'] + f_u = uiObj['Member']['fu(MPa)'] + f_y = uiObj['Member']['fy(MPa)'] + + F = uiObj['Load']['shearForce(kN)'] + + bolt_dia = uiObj['Bolt']['diameter(mm)'] + bolt_type = uiObj["Bolt"]["type"] + bolt_grade = uiObj['Bolt']['grade'] + + plate_thk = uiObj['Plate']['thickness(mm)'] + plate_width = uiObj['Plate']['width(mm)'] + plate_len = uiObj['Plate']['height(mm)'] + + weld_thk = uiObj["Weld"]['size(mm)'] + FOS_u = 1.25 + FOS_n = 1.1 + k_b = 0.5 + dictbeamdata = get_beamdata(beam_sec) + print dictbeamdata + t_wb = float(dictbeamdata[QString("tw")]) + d_web_b = float(dictbeamdata[QString("D")]) + mu_f = 0.55 + + #------- tw of beamt_wb = 8.9 # Thickness of web of the connected member ISMB 400 + #-----D of beam d_web_b = 380 #column Clear depth of web of the connected member ISMB 400 + no_row_b = 3 + no_col_b = 1 +#------------------------------------------------------------------------------ + #---------------------------------------------------------- # Fin plate data + #------------------------------------------------------------ plate_thk = 10 + #--------------------------------------------------------- plate_width = 100 + #----------------------------------------------------------- plate_len = 300 +#------------------------------------------------------------------------------ + #------------------------------------------------------------------- F = 140 + # your calculations + ''' + Design of bolts + ''' + logger.info("Starting Design Calculations ") + # Shearing capacity of bolt + V_dsb = (0.78*math.pi*bolt_dia**2/4 * math.floor(float(bolt_grade))*100)/(math.sqrt(3)*1000*FOS_u) + V_dsb = round(V_dsb,3) + + + # Bearing capacity of bolt + V_dpb = 2.5*k_b*bolt_dia*t_wb*f_u/(FOS_u*1000) + V_dpb = round(V_dpb,3) + if V_dsb > V_dpb: + V_db = V_dpb + else: + V_db = V_dsb + + #number of bolts + no_b = math.ceil(F/V_db) + if no_b <= 2: + no_b = 3 + + # Hole diameter + if bolt_dia == 12 or bolt_dia == 14: + dia_h = bolt_dia + 1 + elif bolt_dia == 16 or bolt_dia == 18 or bolt_dia == 20 or bolt_dia == 22 or bolt_dia == 24: + dia_h = bolt_dia + 2 + else: + dia_h = bolt_dia + 3 + + # End and edge distance + d_edge = 2 * dia_h + d_end = 2 * dia_h + if d_edge < 50 or d_end < 50: + d_edge = 50 + d_end = 50 + else: + d_edge = math.ceil(d_edge) + d_end = math.ceil(d_end) + + # Web side plate length and width input + if plate_len == 0: + plate_len = d_web_b - 60 + elif plate_len > d_web_b - 60: + logger.error("The length of the plate is more than the available depth of %2.2f mm " % (plate_len)) + print('Re-enter Length') + plate_width_min = 2*d_end + if plate_width == 0: + plate_width_min = 2*d_end + if plate_width < plate_width_min: + logger.error(" Plate width is less than the minimum width required of %2.2f mm " % (plate_width_min)) + #print('Re-enter Width') + #....................................................................... + + plate_len_b = plate_len - 2*d_edge # Length available for bolt group + pitch_min = 1.5*bolt_dia + pitch = plate_len_b/(no_b-1) + pitch = round(pitch,3) + if no_col_b == 1: + gauge = 0 + else: + gauge = 50 + + # Deciding on arrangement of bolts + no_b_oneline = (plate_len_b//pitch_min) + 1 + + + + if pitch < pitch_min: + logger.warning("Pitch distance is less than the minimum required") + #print('Pitch distance is insufficient') + + + + + #....................................................................... + ''' + Web side plate design + ''' + + #if plate_len > d_web_b: + #print('Reselect the length of plate less than depth of the connected web') + + thk_min = round((5*F*1000)/(f_y*plate_len),3) + + if thk_min > plate_thk: + logger.error("The selected thickness of finplate is less than the minimun required") + flag = 0 + #print('Thickness of fin plate is insufficient') + + #d_clear = 20 + x = int(no_b//2) + M_ext = 0 + for i in range(1,x+1): + if no_b%2 == 1: + M_ext += 2*(i*(pitch**2)/pitch)*V_dsb + elif no_b%2 == 0: + M_ext = i*((pitch/2)**2)/(pitch/2)*V_dsb + M_ext = round(M_ext/1000,3) + #print(M_ext) + + M_cap = 1.2*(f_y/FOS_n)*(plate_thk*plate_len**2)/(6*1000) + M_cap = round(M_cap/(1000),3) + #print(M_cap) + + if M_cap < M_ext: + + logger.error("The flexural moment capacity of the finplate is less than the external moment") + flag = 0 + #print('The plate design is OK') + #flag = False + + ''' + Weld Design + ''' + # Resultant shear on weld + l_eff_w = plate_len - 2*weld_thk + #print(l_eff_w) + H_sh = (M_ext*6000)/(2*(l_eff_w**2)) + #print(H_sh) + V_sh = F/float(2*l_eff_w) + #print(V_sh) + R_sh = math.sqrt(H_sh**2 + V_sh**2) + R_sh = round(R_sh,3) + #print(R_sh) + + t_w_ductility = 0.6 * plate_thk / 0.7 + #print(t_w_ductility) + + if weld_thk < t_w_ductility: + thk_weld = int(t_w_ductility) + else: + thk_weld = weld_thk + + #print(weld_thk) + + # Weld strength + f_wd = f_u/float(math.sqrt(3)*FOS_u) + #print(f_wd) + R_nw = f_wd*0.7*weld_thk/1000 + R_nw = round(R_nw,3) + # End of calculation + + outputObj = {} + outputObj['Bolt'] ={} + outputObj['Bolt']['shearcapacity'] = V_dsb + outputObj['Bolt']['bearingcapacity'] = V_dpb + outputObj['Bolt']['boltcapacity'] = V_db + outputObj['Bolt']['numofbolts'] = no_b + outputObj['Bolt']['boltgrpcapacity'] = 0.0 + outputObj['Bolt']['numofrow'] = no_row_b + outputObj['Bolt']['numofcol'] = no_col_b + outputObj['Bolt']['pitch'] = pitch + + outputObj['Bolt']['enddist'] = d_end + + outputObj['Bolt']['edge'] = d_edge + outputObj['Bolt']['gauge'] = gauge + + outputObj['Weld'] = {} + outputObj['Weld']['thickness'] = thk_weld + outputObj['Weld']['resultantshear'] = R_sh + outputObj['Weld']['weldstrength'] = R_nw + + outputObj['Plate'] = {} + outputObj['Plate']['height'] = 0 + outputObj['Plate']['width'] = 0 + outputObj['Plate']['externalmoment'] = M_ext + outputObj['Plate']['momentcapacity'] = M_cap + + if flag != 0: + logger.info("Design is safe") + else: + logger.error("Design is not safe") + return outputObj + |