def write_notes(system, Vnominal=240.0): stationClass = 1 name, usaf = geo.closestUSAF( geo.zipToCoordinates(system.zipcode), stationClass) mintemp = epw.minimum(usaf) twopercentTemp = epw.twopercent(usaf) fields = [] for i in set(system.shape): print "PV Module Ratings @ STC" print "Module Make:", i.array.make fields.append(('Text1ModuleMake',i.array.make)) print "Module Model:", i.array.model fields.append(('Text1ModuleModel',i.array.model)) print "Max Power-Point Current (Imp):",i.array.Impp fields.append(('MAX POWERPOINT CURRENT IMP',i.array.Impp)) print "Max Power-Point Voltage (Vmp):",i.array.Vmpp fields.append(('MAX POWERPOINT VOLTAGE VMP',i.array.Vmpp)) print "Open-Circuit Voltage (Voc):",i.array.Voc fields.append(('OPENCIRCUIT VOLTAGE VOC',i.array.Voc)) print "Short-Circuit Current (Isc):",i.array.Isc fields.append(('SHORTCIRCUIT CURRENT ISC',i.array.Isc)) fields.append(('MAX SERIES FUSE OCPD','15')) print "Maximum Power (Pmax):",i.array.Pmax fields.append(('MAXIMUM POWER PMAX',i.array.Pmax)) print "Module Rated Max Voltage:",i.array.Vrated fields.append(('MAX VOLTAGE TYP 600VDC',i.array.Vrated)) fields.append(('VOC TEMP COEFF mVoC or oC',round(i.array.TkVoc,2))) fields.append(('VOC TEMP COEFF mVoC','On')) print "Inverter Make:",i.make fields.append(('INVERTER MAKE',i.make)) print "Inverter Model:",i.model fields.append(('INVERTER MODEL',i.model)) print "Max Power", i.Paco fields.append(('MAX POWER 40oC',i.model)) fields.append(('NOMINAL AC VOLTAGE',240)) print "Max AC Current: %s" % round(i.Paco/Vnominal,2) fields.append(('MAX AC CURRENT', round(i.Paco/Vnominal,2))) fields.append(('MAX DC VOLT RATING',i.model)) print "Max AC OCPD Rating: %s" % ee.ocpSize(i.Paco/Vnominal*1.25) print "Max System Voltage:",round(i.array.Vmax(mintemp),1) print "AC Output Current: %s" % \ round(sum([i.Paco for i in system.shape])/Vnominal,2) fields.append(('AC OUTPUT CURRENT', \ round(sum([i.Paco for i in system.shape])/Vnominal,2))) print "Nominal AC Voltage: %s" % Vnominal fields.append(('NOMINAL AC VOLTAGE_2',i.ac_voltage)) print "Minimum Temperature: %s C" % mintemp print "2 Percent Max: %s C" % twopercentTemp from fdfgen import forge_fdf fdf = forge_fdf("",fields,[],[],[]) fdf_file = open("data.fdf","w") fdf_file.write(fdf) fdf_file.close() import shlex from subprocess import call cmd = shlex.split("pdftk Example2-Micro-Inverter.pdf fill_form data.fdf output output.pdf flatten") rc = call(cmd)
def vd(a,l,size= None,v = 240, pf=-1, tAmb=30, percent=1, material='CU', \ c='STEEL',verbose = True): oc = a * 1.25 ocp = ee.ocpSize(oc) #print "OCP Size: %s" % ocp #egc = ee.findEGC(ocp,material) vdrop = v * percent/100.0 #ratio = ee.CMIL[ee.conductorAmpacity(a,material).size]*1.0/ee.CMIL[ee.findEGC(ocp)] if size: conductor = ee.conductor(size,material) conductor = ee.checkAmpacity(conductor, ocp, tAmb) vdrop = conductor.vd(a,l, v = v, pf=pf, tAmb=tAmb,c=c) vdp=(vdrop * 100/v) if verbose: print "Percent drop: %s%%" % round(vdp,2) #print "EGC Size: %s" % incEGC(conductor,egc,ratio) return conductor else: if verbose: print "Allowed Voltage drop: %sV" % vdrop sets = 0 conductor = None #todo: refactor for recursive. should take away the need for nec import while conductor is None: sets += 1 for s in nec.CONDUCTOR_STANDARD_SIZES: #print s, material conductor = ee.conductor(s,material) #print conductor if conductor.vd(a*1.0/sets,l, v = v, pf=pf, tAmb=tAmb,c=c) < vdrop: break else: conductor = None if sets > 1: print "%s sets of %s" % (sets, conductor) #print "EGC Size: %s" % incEGC(conductor,egc,ratio) return [conductor for i in range(sets)] else: if verbose: print "Conductor %s" % conductor conductor = ee.checkAmpacity(conductor, ocp/sets, tAmb) #print "EGC Size: %s %s" % ( incEGC(conductor,egc,ratio),'CU'#conductor.material) if verbose: print "Drop: %s V" % round(conductor.vd(a*1.0/sets,l, v = v, pf=pf, tAmb=tAmb,c=c),2) return conductor