JEPL/jepl/jepl.py
2024-12-12 17:41:15 -04:00

79 lines
2.4 KiB
Python

'''
JMK Engineering Inc. Python Library for design and such.
by: Jeff MacKinnon
email: jeff@jmkengineering.com
'''
import pandas as pd
import numpy as np
import math
def Test():
print( "JMK Python Module works! !")
def voltage_drop(nominal_voltage, current, material ='cu', code = 'CEC'):
print(test)
from .tables import *
def conductor_size(current, temp = 75, material = 'cu', code = 'CEC', raceway = True, ambient = 30, max = 500):
'''
The default temp column will be the 75C column as most terminals are rated for this.
The default code is CEC as that is where I am.
I still need to incorporate ambient temperature deratings, but that will be a future improvement
'''
material = material.upper()
code = code.upper()
max = str(max)
valid_temp = [60,75,90]
valid_temp_str = [str(x) for x in valid_temp]
valid_code = ['CEC',
]
valid_material = ['CU',
'AL',
]
#check to make sure that the values are valid
if temp not in valid_temp:
return print(temp + " is not valid. The valid temps are "+ str(valid_temp_str))
if code not in valid_code:
return print(code + " is not a valid code. The valid codes are "+ str(valid_code))
if material not in valid_material:
return print(material + " is not a valid material. I should be 'al' or 'cu'.")
# select the correct code table
if (code == 'CEC') & (material == 'CU') & (raceway == False):
code_table = CEC_table1
elif (code == 'CEC') & (material == 'CU') & (raceway == True):
code_table = CEC_table2
elif (code =='CEC') & (material =='AL') & (raceway == False):
code_table = CEC_table3
elif (code =='CEC') & (material =='AL') & (raceway == True):
code_table = CEC_table4
elif (code =='NEC') & (material =='CU'):
return (' I haven\'t created this table yet')
elif (code =='NEC') & (material =='AL'):
return (' I haven\'t created this table yet')
else:
return ('The variables were\'t right, but I\'m a loss to why.')
temp = str(temp)
max_current_loc = code_table.loc[code_table['size'] == max][str(temp)]
max_current = max_current_loc.iloc[0]
num_parallel = math.ceil(current / max_current)
con_current = current / num_parallel
size = code_table[code_table[temp].ge(con_current)]['size'].iloc[0]
return [size,num_parallel]