Multi-Board Rules

The container's .kicad_pro holds rule sets that apply across all sub-board PCBs. Each set is independent: passing a list to set_rules replaces that set, omitting (or passing None) leaves it untouched.

get_rules()

Reads every rule set from the container.

mbs = kicad.get_mbs_schematic()
rules = mbs.multi_board.get_rules().rules

for r in rules.min_power_pins:
    print(f"{r.net_name}: ≥ {r.min_pins} pins")

for r in rules.max_length_nm:
    print(f"{r.net_name}: max {r.max_length_nm} nm")

for r in rules.cross_board_diff_pairs:
    print(f"diff pair: {r.p} / {r.n}")

Five rule sets are returned: min_power_pins, max_length_nm, cross_board_diff_pairs, current_rules, voltage_rules.

set_rules(...)

Replace one or more rule sets. Each kwarg controls its own set.

mbs.multi_board.set_rules(
    min_power_pins=[
        {"net_name": "+5V",  "min_pins": 4},
        {"net_name": "+3V3", "min_pins": 2},
    ],
    max_length_nm=[
        {"net_name": "USB_DP", "max_length_nm": 50_000_000},
        {"net_name": "USB_DN", "max_length_nm": 50_000_000},
    ],
    cross_board_diff_pairs=[
        {"p": "USB_DP", "n": "USB_DN"},
    ],
)

Pass an empty list to clear a set; omit the kwarg (or pass None) to leave it as-is.

Current rules

mbs.multi_board.set_rules(
    current_rules=[
        {"net_name": "+5V", "expected_amps": 1.5, "pin_rating_amps": 3.0},
    ],
)

Voltage rules

mbs.multi_board.set_rules(
    voltage_rules=[
        {
            "net_name": "+3V3",
            "expected_amps": 0.5,
            "max_drop_mv": 100.0,
            "trace_width_um": 250.0,
            "trace_sheet_r_milliohm_per_sq": 17.0,
            "contact_r_per_pin_milliohm": 5.0,
        },
    ],
)