round_value_robin.py 2.15 KB
Newer Older
1 2 3 4 5 6
#
# Example python script to generate an equivalent XML document from XML input
#
# Example: Round value robin, XML to XML conversion with partial value monging
#

7 8
from __future__ import print_function

9
# Import the KiCad python helper module and the csv formatter
10
import kicad_netlist_reader
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
import sys

def checkvalue(self):
    """Check values, and replace with preferred/consistent values"""
    ref = self.getRef()
    r = ref.split("R")
    c = ref.split("C")
    v = self.getValue()

    # Common to all values - convert decimation if necessary
    dec = v.split(",")
    if (len(dec) == 2):
        newval = dec[0] + "." + dec[1]
        self.setValue(newval)
        v = self.getValue()
26

27 28 29 30 31 32
    if len(r) == 2 and r[1].isdigit():
        # This is a resistor - make values consistent
        # If the value is a pure value, add R to the end of the value
        if v.isdigit():
            i = int(v)
            if (i > 1000000):
33
                i = i / 1000000
34 35 36 37 38
                v = str(i) + "M"
            if (i > 1000):
                i = i / 1000
                v = str(i) + "K"
            else:
39 40
                v = str(i) + "R"

41 42 43 44 45 46 47 48 49
            self.setValue(v)
        else:
            # Get the multiplier character
            multiplier = v[len(v) - 1]
            v = v.strip(multiplier)
            v = v.split(".")
            if (len(v) == 2):
                newval = v[0] + multiplier + v[1]
                self.setValue(newval)
50 51 52
                v = self.getValue()


53 54 55

# Give components a new method for checking the values (this could easily be a
# Company Part Number generator method instead)
56
kicad_netlist_reader.comp.checkvalue = checkvalue
57

58 59
# Generate an instance of a generic netlist, and load the netlist tree from
# the command line option. If the file doesn't exist, execution will stop
60
net = kicad_netlist_reader.netlist(sys.argv[1])
61 62 63 64 65 66

# Open a file to write to, if the file cannot be opened output to stdout
# instead
try:
    f = open(sys.argv[2], 'w')
except IOError:
67
    e = "Can't open output file for writing: " + sys.argv[2]
68
    print(__file__, ":", e, file=sys.stderr)
69
    f = sys.stdout
70 71 72

for c in net.components:
    c.checkvalue()
73

74
print(net.formatXML(), file=f)