Date: Fri, 29 Mar 2024 11:46:57 +0000 (GMT) Message-ID: <1020236568.177.1711712817539@[172.30.0.157]> Subject: Exported From Confluence MIME-Version: 1.0 Content-Type: multipart/related; boundary="----=_Part_176_382902713.1711712817539" ------=_Part_176_382902713.1711712817539 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Content-Location: file:///C:/exported.html
This scripts is a netlisting generation shell that can easily be customi= zed. It will walk through the hierarchy for a specified schematic and= print out the elements.
class Net= lister: def __init__(self, awrde: mwo.CMWOffice, schematic: mwo.CSchematic): self.awrde =3D awrde self.schematic =3D schematic self.subcircuits =3D set() self.datafiles =3D set() def output_nodes(self, element): for i, n in enumerate(element.Nodes, 1): pn =3D n.PortNumber nn =3D n.NodeNumber print(f'pin({i})=3Dnode({nn}) ', end=3D'') def output_parameters(self, element): for p in element.Parameters: print(f'{p.Name}=3D{p.ValueAsString} ', end=3D'') def output_element(self, elem: mwo.CElement): awrde =3D self.awrde if 'SUBCKT' in elem.Name: # get the name of the subcircuit, will be double quoted so remo= ve them subckt_name =3D elem.Parameters('NET').ValueAsString.replace('"= ', '') # need to determine the type if awrde.Project.Schematics.Exists(subckt_name): self.output_sch_subcircuit(elem, subckt_name) elif awrde.Project.EMStructures.Exists(subckt_name): self.output_em_structure(elem, subckt_name) elif awrde.Project.EM3DStructures.Exists(subckt_name): self.output_em3d_structure(elem, subckt_name) elif awrde.Project.DataFiles.Exists(subckt_name): self.output_datafile(elem, subckt_name) else: pdb.set_trace() raise ValueError(f'Cannot find subcircuit named "{subckt_na= me}"') else: try: (name, _) =3D elem.Name.split('.') except: # elements like GND don't have ID's name =3D elem.Name print(f'{name} ', end=3D'') self.output_nodes(elem) self.output_parameters(elem) print() def output_em_structure(self, elem: mwo.CElement, name: str): print(f'EM_Structure ', end=3D'') self.output_nodes(elem) self.output_parameters(elem) print() def output_em3d_structure(self, elem: mwo.CElement, name: str): print(f'3DEM_Structure ', end=3D'') self.output_nodes(elem) self.output_parameters(elem) print() def output_sch_subcircuit(self, elem: mwo.CElement, name: str): print(f'Subcircuit ', end=3D'') self.output_nodes(elem) self.output_parameters(elem) self.subcircuits.add(name) def output_datafile(self, elem: mwo.CElement, name: str): print(f'Datafile ', end=3D'') self.output_nodes(elem) self.output_parameters(elem) self.datafiles.add(name) def generate(self): for element in self.schematic.Elements: self.output_element(element) =20 # now we have to netlist all the referenced schematics while self.subcircuits: schematic_name =3D self.subcircuits.pop() # get the schematic by name schematic =3D self.awrde.Project.Schematics(schematic_name) print(f'\nDEFINE_SCHEMATIC {schematic_name}') for element in schematic.Elements: self.output_element(element) print(f'END_SCHEMATIC {schematic_name}') print() while self.datafiles: datafile =3D self.datafiles.pop() print(f'INCLUDE "{datafile}"')
for convenience this is included in pyawr.helpers and can be invoked by = creating a netlister object for a schematic and calling generate().
from pyaw= r.helpers import Netlister import pyawr.mwoffice as mwo awrde =3D mwo.CMWOffice() # open project you want s =3D awrde.Project.Schematics('name of schematic') netlister =3D Netlister(awrde, s) netlister.generate()