Add list of designators to BOM

This commit is contained in:
Daniel Rojas 2020-06-13 15:38:37 +02:00
parent c0f72bcc16
commit 75e1c119d4

View File

@ -254,15 +254,15 @@ class Harness:
d.render(filename=filename, directory=directory, view=view, cleanup=cleanup) d.render(filename=filename, directory=directory, view=view, cleanup=cleanup)
d.save(filename='{}.gv'.format(filename), directory=directory) d.save(filename='{}.gv'.format(filename), directory=directory)
# bom output # bom output
with open('{}.bom.csv'.format(filename),'w') as file: with open('{}.bom.tsv'.format(filename),'w') as file:
file.write(self.generate_bom()) file.write(self.generate_bom())
# TODO: cut list output # TODO: cut list output
def generate_bom(self): def generate_bom(self):
bom = '' bom = ''
# list connectors # list connectors
bom = bom + 'Type\tGender\tPincount\tQty\n' bom = bom + 'Type\tGender\tPincount\tQty\tDesignators\n'
bom = bom + '---\t---\t---\t---\n' bom = bom + '---\t---\t---\t---\t---\n'
types = Counter([v.type for v in self.nodes.values()]) types = Counter([v.type for v in self.nodes.values()])
# print('Types:', types) # print('Types:', types)
for type in types.keys(): for type in types.keys():
@ -271,16 +271,18 @@ class Harness:
# print(' ', 'Genders:', genders) # print(' ', 'Genders:', genders)
for gender in genders.keys(): for gender in genders.keys():
# print(' ', type, gender, '({})'.format(genders[gender])) # print(' ', type, gender, '({})'.format(genders[gender]))
# print(keys)
pincounts = Counter([v.num_pins for v in self.nodes.values() if v.type == type and v.gender == gender]) pincounts = Counter([v.num_pins for v in self.nodes.values() if v.type == type and v.gender == gender])
# print(' ', 'Pincounts:', pincounts) # print(' ', 'Pincounts:', pincounts)
for pincount in pincounts.keys(): for pincount in pincounts.keys():
# print(' ', type, gender, pincount, 'pins :', pincounts[pincount]) # print(' ', type, gender, pincount, 'pins :', pincounts[pincount])
bom = bom + '{type}\t{gender}\t{pincount}\t{qty}\n'.format(type=type, gender=gender, pincount=pincount, qty=pincounts[pincount]) designators = [k for k,v in self.nodes.items() if v.type == type and v.gender == gender and v.num_pins == pincount]
bom = bom + '{type}\t{gender}\t{pincount}\t{qty}\t{designators}\n'.format(type=type, gender=gender, pincount=pincount, qty=pincounts[pincount], designators=', '.join(designators))
bom = bom + '\n' bom = bom + '\n'
# list wires # list wires
bom = bom + 'mm2\tWirecount\tTotal length\n' bom = bom + 'mm2\tWirecount\tTotal length\tQty\tDesignators\n'
bom = bom + '---\t---\t---\n' bom = bom + '---\t---\t---\t---\t---\n'
# TODO: make it work with AWG as well # TODO: make it work with AWG as well
mm2s = Counter([v.mm2 for v in self.cables.values()]) mm2s = Counter([v.mm2 for v in self.cables.values()])
for mm2 in mm2s.keys(): for mm2 in mm2s.keys():
@ -289,9 +291,10 @@ class Harness:
for wirecount in wirecounts.keys(): for wirecount in wirecounts.keys():
# print(' ', mm2, wirecount, ':', wirecounts[wirecount]) # print(' ', mm2, wirecount, ':', wirecounts[wirecount])
lengths = [v.length for v in self.cables.values() if v.mm2 == mm2 and v.num_wires == wirecount] lengths = [v.length for v in self.cables.values() if v.mm2 == mm2 and v.num_wires == wirecount]
designators = [k for k,v in self.cables.items() if v.mm2 == mm2 and v.num_wires == wirecount]
# print(' ', 'Lengths:', lengths) # print(' ', 'Lengths:', lengths)
# print(' ', 'Total lengths:', sum(lengths)) # print(' ', 'Total lengths:', sum(lengths))
bom = bom + '{mm2}\t{wirecount}\t{len_total}\n'.format(mm2=mm2, wirecount=wirecount, len_total=round(sum(lengths),3)) bom = bom + '{mm2}\t{wirecount}\t{len_total}\t{qty}\t{designators}\n'.format(mm2=mm2, wirecount=wirecount, len_total=round(sum(lengths),3), qty=len(lengths), designators=', '.join(designators))
return bom return bom
@ -528,7 +531,7 @@ def parse(file_in, file_out=None):
# print('{} section empty'.format(sec)) # print('{} section empty'.format(sec))
pass pass
else: else:
print('No {} section found'.format(sec)) # print('No {} section found'.format(sec))
if ty == dict: if ty == dict:
input[sec] = {} input[sec] = {}
elif ty == list: elif ty == list: