diff --git a/CHANGELOG.md b/CHANGELOG.md index 0cc5edba..9d31dcde 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -41,6 +41,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Blender export: - Rotations are now applied to the current view, not just the top view - Board/components not visible for small boards (See #484) +- update_xml with check_pcb_parity enabled: + - Avoid errors for KiCad 6 using "Exclude from BoM" components. + This limitation isn't found on KiCad 7. (#486) + - *exclude_from_bom* mismatch on KiCad 7 + - *Sheetfile* mismatch on KiCad 7 when testing from different directory ## [1.6.3] - 2023-06-26 diff --git a/docs/source/configuration/sup_preflights.rst b/docs/source/configuration/sup_preflights.rst index b34bebfb..76046954 100644 --- a/docs/source/configuration/sup_preflights.rst +++ b/docs/source/configuration/sup_preflights.rst @@ -146,7 +146,8 @@ Supported preflights - **check_pcb_parity** :index:`: ` [boolean=false] Check if the PCB and Schematic are synchronized. This is equivalent to the *Test for parity between PCB and schematic* of the DRC dialog. - Only available for KiCad 6+. + Not available for KiCad 5. **Important**: when using KiCad 6 and the *Exclude from BoM* attribute + these components won't be included in the generated XML, so we can't check its parity. - ``as_warnings`` :index:`: ` [boolean=false] Inform the problems as warnings and don't stop. - ``enabled`` :index:`: ` [boolean=true] Enable the update. This is the replacement for the boolean value. diff --git a/kibot/misc.py b/kibot/misc.py index 3f1cf0f0..815e555e 100644 --- a/kibot/misc.py +++ b/kibot/misc.py @@ -281,6 +281,7 @@ W_BADVAL4 = '(W127) ' W_ENVEXIST = '(W128) ' W_FLDCOLLISION = '(W129) ' W_NEWGROUP = '(W130) ' +W_NOTINBOM = '(W131) ' # Somehow arbitrary, the colors are real, but can be different PCB_MAT_COLORS = {'fr1': "937042", 'fr2': "949d70", 'fr3': "adacb4", 'fr4': "332B16", 'fr5': "6cc290"} PCB_FINISH_COLORS = {'hal': "8b898c", 'hasl': "8b898c", 'imag': "8b898c", 'enig': "cfb96e", 'enepig': "cfb96e", diff --git a/kibot/pre_update_xml.py b/kibot/pre_update_xml.py index 234397c5..527c6041 100644 --- a/kibot/pre_update_xml.py +++ b/kibot/pre_update_xml.py @@ -18,7 +18,7 @@ from .macros import macros, document, pre_class # noqa: F401 from .error import KiPlotConfigurationError from .gs import GS from .kiplot import load_board -from .misc import BOM_ERROR, NETLIST_DIFF, W_PARITY, MISSING_TOOL, KICAD_VERSION_7_0_1 +from .misc import BOM_ERROR, NETLIST_DIFF, W_PARITY, MISSING_TOOL, KICAD_VERSION_7_0_1, W_NOTINBOM from .log import get_logger from .optionable import Optionable import pcbnew @@ -37,7 +37,8 @@ class Update_XMLOptions(Optionable): self.check_pcb_parity = False """ *Check if the PCB and Schematic are synchronized. This is equivalent to the *Test for parity between PCB and schematic* of the DRC dialog. - Only available for KiCad 6+ """ + Not available for KiCad 5. **Important**: when using KiCad 6 and the *Exclude from BoM* attribute + these components won't be included in the generated XML, so we can't check its parity """ self.as_warnings = False """ Inform the problems as warnings and don't stop """ @@ -75,11 +76,18 @@ class Update_XML(BasePreFlight): # noqa: F821 def check_components(self, comps, errors): found_comps = set() + excluded = set() for m in GS.get_modules(): ref = m.GetReference() + pcb_props = m.GetProperties() found_comps.add(ref) if ref not in comps: - errors.append('{} found in PCB, but not in schematic'.format(ref)) + if GS.ki6_only and pcb_props.get('exclude_from_bom') is not None: + # KiCad 6 doesn't include the excluded components in the netlist + logger.warning(W_NOTINBOM+f"{ref} excluded from BoM we can't check its parity, upgrade to KiCad 7") + excluded.add(ref) + else: + errors.append('{} found in PCB, but not in schematic'.format(ref)) continue sch_data = comps[ref] pcb_fp = m.GetFPIDAsString() @@ -89,7 +97,6 @@ class Update_XML(BasePreFlight): # noqa: F821 if sch_data.val != pcb_val: errors.append('{} value mismatch (PCB: `{}` vs schematic: `{}`)'.format(ref, pcb_val, sch_data.val)) # Properties - pcb_props = m.GetProperties() found_props = set() for p, v in sch_data.props.items(): v_pcb = pcb_props.get(p) @@ -98,14 +105,25 @@ class Update_XML(BasePreFlight): # noqa: F821 continue found_props.add(p) if v_pcb != v: - errors.append('{} property mismatch (PCB: `{}` vs schematic: `{}`)'.format(ref, v_pcb, v)) + if v is None: + # Things like "exclude_from_bom" has no "value", so we get None, but they have '' in the PCB + v = '' + elif p == 'Sheetfile': + # Sheetfile is really inside the .kicad_pcb, but is just generated by Eeschema + # This implies that Eeschema can add a path relative to cwd + # We just check the filename here + v_pcb = os.path.basename(v_pcb) + v = os.path.basename(v) + if v_pcb != v: + errors.append(f'{ref} property `{p}` mismatch (PCB: `{v_pcb}` vs schematic: `{v}`)') # Missing properties for p in set(pcb_props.keys()).difference(found_props): errors.append('{} PCB property `{}` not in schematic'.format(ref, p)) for ref in set(comps.keys()).difference(found_comps): errors.append('{} found in schematic, but not in PCB'.format(ref)) + return excluded - def check_nets(self, net_nodes, errors): + def check_nets(self, net_nodes, errors, excluded): # Total count con = GS.board.GetConnectivity() pcb_net_count = con.GetNetCount()-1 # Removing the bogus net 0 @@ -127,7 +145,8 @@ class Update_XML(BasePreFlight): # noqa: F821 pcb_net_names.add(net_name) sch_nodes = net_nodes[net_name] pcb_nodes = {pad.GetParent().GetReference()+' pin '+pad.GetNumber() - for pad in con.GetNetItems(n, pcbnew.PCB_PAD_T)} + for pad in con.GetNetItems(n, pcbnew.PCB_PAD_T) + if pad.GetParent().GetReference() not in excluded} dif = pcb_nodes-sch_nodes if dif: errors.append('Net `{}` extra PCB connection/s: {}'.format(net_name, ','.join(list(dif)))) @@ -180,9 +199,9 @@ class Update_XML(BasePreFlight): # noqa: F821 errors = [] load_board() # Check components - self.check_components(comps, errors) + excluded = self.check_components(comps, errors) # Check the nets - self.check_nets(net_nodes, errors) + self.check_nets(net_nodes, errors, excluded) # Report errors if errors: if self.options.as_warnings: diff --git a/tests/board_samples/kicad_6/.gitignore b/tests/board_samples/kicad_6/.gitignore index 8f53294a..8522cf8f 100644 --- a/tests/board_samples/kicad_6/.gitignore +++ b/tests/board_samples/kicad_6/.gitignore @@ -6,3 +6,4 @@ fp-info-cache *-bak pcb_parity.xml batteryPack.kicad_prl +parity_not_in_bom.xml diff --git a/tests/board_samples/kicad_6/parity_not_in_bom.kicad_pcb b/tests/board_samples/kicad_6/parity_not_in_bom.kicad_pcb new file mode 100644 index 00000000..8ff53e9f --- /dev/null +++ b/tests/board_samples/kicad_6/parity_not_in_bom.kicad_pcb @@ -0,0 +1,179 @@ +(kicad_pcb (version 20211014) (generator pcbnew) + + (general + (thickness 1.6) + ) + + (paper "A4") + (layers + (0 "F.Cu" signal) + (31 "B.Cu" signal) + (32 "B.Adhes" user "B.Adhesive") + (33 "F.Adhes" user "F.Adhesive") + (34 "B.Paste" user) + (35 "F.Paste" user) + (36 "B.SilkS" user "B.Silkscreen") + (37 "F.SilkS" user "F.Silkscreen") + (38 "B.Mask" user) + (39 "F.Mask" user) + (40 "Dwgs.User" user "User.Drawings") + (41 "Cmts.User" user "User.Comments") + (42 "Eco1.User" user "User.Eco1") + (43 "Eco2.User" user "User.Eco2") + (44 "Edge.Cuts" user) + (45 "Margin" user) + (46 "B.CrtYd" user "B.Courtyard") + (47 "F.CrtYd" user "F.Courtyard") + (48 "B.Fab" user) + (49 "F.Fab" user) + (50 "User.1" user) + (51 "User.2" user) + (52 "User.3" user) + (53 "User.4" user) + (54 "User.5" user) + (55 "User.6" user) + (56 "User.7" user) + (57 "User.8" user) + (58 "User.9" user) + ) + + (setup + (pad_to_mask_clearance 0) + (pcbplotparams + (layerselection 0x00010fc_ffffffff) + (disableapertmacros false) + (usegerberextensions false) + (usegerberattributes true) + (usegerberadvancedattributes true) + (creategerberjobfile true) + (svguseinch false) + (svgprecision 6) + (excludeedgelayer true) + (plotframeref false) + (viasonmask false) + (mode 1) + (useauxorigin false) + (hpglpennumber 1) + (hpglpenspeed 20) + (hpglpendiameter 15.000000) + (dxfpolygonmode true) + (dxfimperialunits true) + (dxfusepcbnewfont true) + (psnegative false) + (psa4output false) + (plotreference true) + (plotvalue true) + (plotinvisibletext false) + (sketchpadsonfab false) + (subtractmaskfromsilk false) + (outputformat 1) + (mirror false) + (drillshape 1) + (scaleselection 1) + (outputdirectory "") + ) + ) + + (net 0 "") + (net 1 "Net-(R1-Pad1)") + (net 2 "Net-(R1-Pad2)") + + (footprint "Resistor_SMD:R_0805_2012Metric" (layer "F.Cu") + (tedit 5F68FEEE) (tstamp 71391f61-a293-4f48-90fc-560a7915df90) + (at 141.7 90.21) + (descr "Resistor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") + (tags "resistor") + (property "Sheetfile" "parity_not_in_bom.kicad_sch") + (property "Sheetname" "") + (path "/53197f63-58c2-43cf-a8eb-f753d7ef24dd") + (attr smd) + (fp_text reference "R1" (at 0 -1.65) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 7b2615b6-a345-4b0f-99b6-86e596033ed3) + ) + (fp_text value "R" (at 0 1.65) (layer "F.Fab") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 5290912d-ff49-4c4c-b4e3-50b9698dd21f) + ) + (fp_text user "${REFERENCE}" (at 0 0) (layer "F.Fab") + (effects (font (size 0.5 0.5) (thickness 0.08))) + (tstamp eb04c778-b915-4ef5-a2a4-7105bd2f4240) + ) + (fp_line (start -0.227064 0.735) (end 0.227064 0.735) (layer "F.SilkS") (width 0.12) (tstamp 041c7c60-ec2d-4320-905a-23b4d81b9953)) + (fp_line (start -0.227064 -0.735) (end 0.227064 -0.735) (layer "F.SilkS") (width 0.12) (tstamp b0208b82-bc34-4e1f-8c1d-10c6625fa24e)) + (fp_line (start 1.68 -0.95) (end 1.68 0.95) (layer "F.CrtYd") (width 0.05) (tstamp 0d6b5b31-ccaf-4919-81ac-e61b309d843c)) + (fp_line (start 1.68 0.95) (end -1.68 0.95) (layer "F.CrtYd") (width 0.05) (tstamp 21aa6277-8a7a-4c94-a5f7-017929a9b2ff)) + (fp_line (start -1.68 0.95) (end -1.68 -0.95) (layer "F.CrtYd") (width 0.05) (tstamp a9ea8b5b-4a6e-4d9d-b048-252fc1412ecc)) + (fp_line (start -1.68 -0.95) (end 1.68 -0.95) (layer "F.CrtYd") (width 0.05) (tstamp cd03aab6-fb56-4749-955c-8702606368c0)) + (fp_line (start 1 0.625) (end -1 0.625) (layer "F.Fab") (width 0.1) (tstamp 0e9b16bf-7aaf-45bb-bf13-46ff64c7194e)) + (fp_line (start 1 -0.625) (end 1 0.625) (layer "F.Fab") (width 0.1) (tstamp 8d86c185-7ab4-410b-a7e0-f3b951d5d0e1)) + (fp_line (start -1 -0.625) (end 1 -0.625) (layer "F.Fab") (width 0.1) (tstamp a2c86f64-3d5d-44f3-bd2b-3d3ba76a1534)) + (fp_line (start -1 0.625) (end -1 -0.625) (layer "F.Fab") (width 0.1) (tstamp b293f011-f92a-4975-9065-a7f8b42ad6e4)) + (pad "1" smd roundrect (at -0.9125 0) (size 1.025 1.4) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.243902) + (net 1 "Net-(R1-Pad1)") (pintype "passive") (tstamp a8ef74a0-4909-496a-89c3-192e03d40865)) + (pad "2" smd roundrect (at 0.9125 0) (size 1.025 1.4) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.243902) + (net 2 "Net-(R1-Pad2)") (pintype "passive") (tstamp d086af99-eb9a-43cd-a4a8-5fa85bf21c7b)) + (model "${KICAD6_3DMODEL_DIR}/Resistor_SMD.3dshapes/R_0805_2012Metric.wrl" + (offset (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (footprint "Resistor_SMD:R_0805_2012Metric" (layer "F.Cu") + (tedit 5F68FEEE) (tstamp d22575fe-eeae-4e33-8079-95b8a28b872b) + (at 146.11 90.21) + (descr "Resistor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") + (tags "resistor") + (property "Sheetfile" "k6_no_bom.kicad_sch") + (property "Sheetname" "") + (property "exclude_from_bom" "") + (path "/fe915a0d-788b-436b-b91c-17b812706857") + (attr smd exclude_from_bom) + (fp_text reference "R2" (at 0 -1.65) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 6c0d166e-25bb-45a4-b695-c69a4b50cfcb) + ) + (fp_text value "R" (at 0 1.65) (layer "F.Fab") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp acd644dc-8346-4fcf-baaa-3ae973ac2e7f) + ) + (fp_text user "${REFERENCE}" (at 0 0) (layer "F.Fab") + (effects (font (size 0.5 0.5) (thickness 0.08))) + (tstamp 922f6531-fad7-4af0-bae9-d2a838d28ab5) + ) + (fp_line (start -0.227064 -0.735) (end 0.227064 -0.735) (layer "F.SilkS") (width 0.12) (tstamp 02ad1c2c-2155-44fe-a999-617e3e26b6ed)) + (fp_line (start -0.227064 0.735) (end 0.227064 0.735) (layer "F.SilkS") (width 0.12) (tstamp 801a1b3e-eb10-4c50-b990-5600113eecca)) + (fp_line (start 1.68 -0.95) (end 1.68 0.95) (layer "F.CrtYd") (width 0.05) (tstamp 3c1f14c4-cf78-46c0-96d2-0c75b8736344)) + (fp_line (start 1.68 0.95) (end -1.68 0.95) (layer "F.CrtYd") (width 0.05) (tstamp dac0fd80-6512-4cad-bc11-8e8b8d585be5)) + (fp_line (start -1.68 0.95) (end -1.68 -0.95) (layer "F.CrtYd") (width 0.05) (tstamp e6d471eb-43c2-4c5e-b3d0-0b05ff0d1202)) + (fp_line (start -1.68 -0.95) (end 1.68 -0.95) (layer "F.CrtYd") (width 0.05) (tstamp f4f9b330-946a-419d-a0ea-0791a45e19a6)) + (fp_line (start -1 0.625) (end -1 -0.625) (layer "F.Fab") (width 0.1) (tstamp 2e12ae73-a5ce-4694-8479-11a8d34a75b5)) + (fp_line (start 1 0.625) (end -1 0.625) (layer "F.Fab") (width 0.1) (tstamp 44c349af-aaa0-4d2a-96eb-8227ef989713)) + (fp_line (start 1 -0.625) (end 1 0.625) (layer "F.Fab") (width 0.1) (tstamp 92dc906b-5680-4858-b5be-457d0c9d9fb0)) + (fp_line (start -1 -0.625) (end 1 -0.625) (layer "F.Fab") (width 0.1) (tstamp d7f641d3-d51d-436f-9ed9-c15d3d4ab67a)) + (pad "1" smd roundrect (at -0.9125 0) (size 1.025 1.4) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.243902) + (net 1 "Net-(R1-Pad1)") (pintype "passive") (tstamp 6fdb1a9d-290c-41b1-95be-28269a8f25bb)) + (pad "2" smd roundrect (at 0.9125 0) (size 1.025 1.4) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.243902) + (net 2 "Net-(R1-Pad2)") (pintype "passive") (tstamp 55596410-e2e1-4872-ad6a-0f26ec48afb1)) + (model "${KICAD6_3DMODEL_DIR}/Resistor_SMD.3dshapes/R_0805_2012Metric.wrl" + (offset (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (gr_rect (start 139.07 86.08) (end 148.99 93.73) (layer "Edge.Cuts") (width 0.1) (fill none) (tstamp 76666355-656c-4bbc-b564-0e519858b554)) + + (segment (start 140.7875 91.7275) (end 141.59 92.53) (width 0.25) (layer "F.Cu") (net 1) (tstamp 1479941e-ba33-4fc7-a01f-38b6929e9fa6)) + (segment (start 145.1975 91.8425) (end 145.1975 90.21) (width 0.25) (layer "F.Cu") (net 1) (tstamp 5e124c25-5aed-47d4-b681-87043a35d032)) + (segment (start 141.59 92.53) (end 144.51 92.53) (width 0.25) (layer "F.Cu") (net 1) (tstamp 65cace76-e388-42c4-89f5-224130d41350)) + (segment (start 144.51 92.53) (end 145.1975 91.8425) (width 0.25) (layer "F.Cu") (net 1) (tstamp 6bdaf2c2-e285-41e3-a359-fdda0fe5f0bb)) + (segment (start 140.7875 90.21) (end 140.7875 91.7275) (width 0.25) (layer "F.Cu") (net 1) (tstamp 6e063370-a136-4b04-9db4-51c9137330af)) + (segment (start 143.16 88.22) (end 146.26 88.22) (width 0.25) (layer "F.Cu") (net 2) (tstamp 0a2fa0f2-3faf-4442-9576-2f87f403922d)) + (segment (start 142.6125 90.21) (end 142.6125 88.7675) (width 0.25) (layer "F.Cu") (net 2) (tstamp 1ce8ab1b-8bf2-4984-bd7c-b354c87d4735)) + (segment (start 147.0225 88.9825) (end 147.0225 90.21) (width 0.25) (layer "F.Cu") (net 2) (tstamp 37605bd2-ca68-40ac-9778-51db8433a277)) + (segment (start 146.26 88.22) (end 147.0225 88.9825) (width 0.25) (layer "F.Cu") (net 2) (tstamp 89ed9d43-6d56-42da-9239-3c16facf2f20)) + (segment (start 142.6125 88.7675) (end 143.16 88.22) (width 0.25) (layer "F.Cu") (net 2) (tstamp e5b31ba0-c473-4a4a-8fc4-f8790529e32d)) + +) diff --git a/tests/board_samples/kicad_6/parity_not_in_bom.kicad_sch b/tests/board_samples/kicad_6/parity_not_in_bom.kicad_sch new file mode 100644 index 00000000..a7959a14 --- /dev/null +++ b/tests/board_samples/kicad_6/parity_not_in_bom.kicad_sch @@ -0,0 +1,125 @@ +(kicad_sch (version 20211123) (generator eeschema) + + (uuid 3732eaf7-cce4-43cf-b4b9-c9dc29b0959c) + + (paper "A4") + + (lib_symbols + (symbol "Device:R" (pin_numbers hide) (pin_names (offset 0)) (in_bom yes) (on_board yes) + (property "Reference" "R" (id 0) (at 2.032 0 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "R" (id 1) (at 0 0 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (id 2) (at -1.778 0 90) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (id 3) (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_keywords" "R res resistor" (id 4) (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_description" "Resistor" (id 5) (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_fp_filters" "R_*" (id 6) (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (symbol "R_0_1" + (rectangle (start -1.016 -2.54) (end 1.016 2.54) + (stroke (width 0.254) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + ) + (symbol "R_1_1" + (pin passive line (at 0 3.81 270) (length 1.27) + (name "~" (effects (font (size 1.27 1.27)))) + (number "1" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at 0 -3.81 90) (length 1.27) + (name "~" (effects (font (size 1.27 1.27)))) + (number "2" (effects (font (size 1.27 1.27)))) + ) + ) + ) + ) + + + (wire (pts (xy 114.3 71.12) (xy 127 71.12)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid 50547cc0-58b4-41d9-be7a-4dcc3848c41c) + ) + (wire (pts (xy 127 83.82) (xy 127 88.9)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid 552500c0-f580-4698-b875-06e4f0918a52) + ) + (wire (pts (xy 114.3 76.2) (xy 114.3 71.12)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid 55e58413-69f9-4248-b7b2-1d7d19738a40) + ) + (wire (pts (xy 127 71.12) (xy 127 76.2)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid 802a0139-9d26-46a4-9a87-dc3e01d180d3) + ) + (wire (pts (xy 114.3 88.9) (xy 127 88.9)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid 87a32c0a-4611-4f9e-992d-b6acc65e4801) + ) + (wire (pts (xy 114.3 83.82) (xy 114.3 88.9)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid e734b7a7-31ad-4fb1-8ade-ff03908bf4ab) + ) + + (symbol (lib_id "Device:R") (at 114.3 80.01 0) (unit 1) + (in_bom yes) (on_board yes) (fields_autoplaced) + (uuid 53197f63-58c2-43cf-a8eb-f753d7ef24dd) + (property "Reference" "R1" (id 0) (at 116.84 78.7399 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Value" "R" (id 1) (at 116.84 81.2799 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Footprint" "Resistor_SMD:R_0805_2012Metric" (id 2) (at 112.522 80.01 90) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (id 3) (at 114.3 80.01 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid dbf8df6f-5fd0-456e-816c-06b2932108d3)) + (pin "2" (uuid cbf44ba5-afe1-4251-a560-6315b051b326)) + ) + + (symbol (lib_id "Device:R") (at 127 80.01 0) (unit 1) + (in_bom no) (on_board yes) (fields_autoplaced) + (uuid fe915a0d-788b-436b-b91c-17b812706857) + (property "Reference" "R2" (id 0) (at 129.54 78.7399 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Value" "R" (id 1) (at 129.54 81.2799 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Footprint" "Resistor_SMD:R_0805_2012Metric" (id 2) (at 125.222 80.01 90) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (id 3) (at 127 80.01 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 825b933a-362b-4022-a18e-ba18bef3bf92)) + (pin "2" (uuid 6c70b565-558c-4ed1-ac80-3d3de0335385)) + ) + + (sheet_instances + (path "/" (page "1")) + ) + + (symbol_instances + (path "/53197f63-58c2-43cf-a8eb-f753d7ef24dd" + (reference "R1") (unit 1) (value "R") (footprint "Resistor_SMD:R_0805_2012Metric") + ) + (path "/fe915a0d-788b-436b-b91c-17b812706857" + (reference "R2") (unit 1) (value "R") (footprint "Resistor_SMD:R_0805_2012Metric") + ) + ) +) diff --git a/tests/board_samples/kicad_7/.gitignore b/tests/board_samples/kicad_7/.gitignore index 123e99e3..ffbd86a5 100644 --- a/tests/board_samples/kicad_7/.gitignore +++ b/tests/board_samples/kicad_7/.gitignore @@ -6,3 +6,4 @@ fp-info-cache *-backups pcb_parity.xml batteryPack.kicad_prl +parity_not_in_bom.xml diff --git a/tests/board_samples/kicad_7/parity_not_in_bom.kicad_pcb b/tests/board_samples/kicad_7/parity_not_in_bom.kicad_pcb new file mode 100644 index 00000000..9f877f06 --- /dev/null +++ b/tests/board_samples/kicad_7/parity_not_in_bom.kicad_pcb @@ -0,0 +1,208 @@ +(kicad_pcb (version 20221018) (generator pcbnew) + + (general + (thickness 1.6) + ) + + (paper "A4") + (layers + (0 "F.Cu" signal) + (31 "B.Cu" signal) + (32 "B.Adhes" user "B.Adhesive") + (33 "F.Adhes" user "F.Adhesive") + (34 "B.Paste" user) + (35 "F.Paste" user) + (36 "B.SilkS" user "B.Silkscreen") + (37 "F.SilkS" user "F.Silkscreen") + (38 "B.Mask" user) + (39 "F.Mask" user) + (40 "Dwgs.User" user "User.Drawings") + (41 "Cmts.User" user "User.Comments") + (42 "Eco1.User" user "User.Eco1") + (43 "Eco2.User" user "User.Eco2") + (44 "Edge.Cuts" user) + (45 "Margin" user) + (46 "B.CrtYd" user "B.Courtyard") + (47 "F.CrtYd" user "F.Courtyard") + (48 "B.Fab" user) + (49 "F.Fab" user) + (50 "User.1" user) + (51 "User.2" user) + (52 "User.3" user) + (53 "User.4" user) + (54 "User.5" user) + (55 "User.6" user) + (56 "User.7" user) + (57 "User.8" user) + (58 "User.9" user) + ) + + (setup + (pad_to_mask_clearance 0) + (pcbplotparams + (layerselection 0x00010fc_ffffffff) + (plot_on_all_layers_selection 0x0000000_00000000) + (disableapertmacros false) + (usegerberextensions false) + (usegerberattributes true) + (usegerberadvancedattributes true) + (creategerberjobfile true) + (dashed_line_dash_ratio 12.000000) + (dashed_line_gap_ratio 3.000000) + (svgprecision 6) + (plotframeref false) + (viasonmask false) + (mode 1) + (useauxorigin false) + (hpglpennumber 1) + (hpglpenspeed 20) + (hpglpendiameter 15.000000) + (dxfpolygonmode true) + (dxfimperialunits true) + (dxfusepcbnewfont true) + (psnegative false) + (psa4output false) + (plotreference true) + (plotvalue true) + (plotinvisibletext false) + (sketchpadsonfab false) + (subtractmaskfromsilk false) + (outputformat 1) + (mirror false) + (drillshape 1) + (scaleselection 1) + (outputdirectory "") + ) + ) + + (property "MYVAR" "tests/data") + (property "PRUEBITA" "Hola!") + + (net 0 "") + (net 1 "Net-(R1-Pad1)") + (net 2 "Net-(R1-Pad2)") + + (footprint "Resistor_SMD:R_0805_2012Metric" (layer "F.Cu") + (tstamp 71391f61-a293-4f48-90fc-560a7915df90) + (at 141.7 90.21) + (descr "Resistor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") + (tags "resistor") + (property "Sheetfile" "parity_not_in_bom.kicad_sch") + (property "Sheetname" "") + (property "ki_description" "Resistor") + (property "ki_keywords" "R res resistor") + (path "/53197f63-58c2-43cf-a8eb-f753d7ef24dd") + (attr smd) + (fp_text reference "R1" (at 0 -1.65) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 7b2615b6-a345-4b0f-99b6-86e596033ed3) + ) + (fp_text value "R" (at 0 1.65) (layer "F.Fab") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 5290912d-ff49-4c4c-b4e3-50b9698dd21f) + ) + (fp_text user "${REFERENCE}" (at 0 0) (layer "F.Fab") + (effects (font (size 0.5 0.5) (thickness 0.08))) + (tstamp eb04c778-b915-4ef5-a2a4-7105bd2f4240) + ) + (fp_line (start -0.227064 -0.735) (end 0.227064 -0.735) + (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp b0208b82-bc34-4e1f-8c1d-10c6625fa24e)) + (fp_line (start -0.227064 0.735) (end 0.227064 0.735) + (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 041c7c60-ec2d-4320-905a-23b4d81b9953)) + (fp_line (start -1.68 -0.95) (end 1.68 -0.95) + (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp cd03aab6-fb56-4749-955c-8702606368c0)) + (fp_line (start -1.68 0.95) (end -1.68 -0.95) + (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp a9ea8b5b-4a6e-4d9d-b048-252fc1412ecc)) + (fp_line (start 1.68 -0.95) (end 1.68 0.95) + (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 0d6b5b31-ccaf-4919-81ac-e61b309d843c)) + (fp_line (start 1.68 0.95) (end -1.68 0.95) + (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 21aa6277-8a7a-4c94-a5f7-017929a9b2ff)) + (fp_line (start -1 -0.625) (end 1 -0.625) + (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp a2c86f64-3d5d-44f3-bd2b-3d3ba76a1534)) + (fp_line (start -1 0.625) (end -1 -0.625) + (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp b293f011-f92a-4975-9065-a7f8b42ad6e4)) + (fp_line (start 1 -0.625) (end 1 0.625) + (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 8d86c185-7ab4-410b-a7e0-f3b951d5d0e1)) + (fp_line (start 1 0.625) (end -1 0.625) + (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 0e9b16bf-7aaf-45bb-bf13-46ff64c7194e)) + (pad "1" smd roundrect (at -0.9125 0) (size 1.025 1.4) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.243902) + (net 1 "Net-(R1-Pad1)") (pintype "passive") (tstamp a8ef74a0-4909-496a-89c3-192e03d40865)) + (pad "2" smd roundrect (at 0.9125 0) (size 1.025 1.4) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.243902) + (net 2 "Net-(R1-Pad2)") (pintype "passive") (tstamp d086af99-eb9a-43cd-a4a8-5fa85bf21c7b)) + (model "${KICAD6_3DMODEL_DIR}/Resistor_SMD.3dshapes/R_0805_2012Metric.wrl" + (offset (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (footprint "Resistor_SMD:R_0805_2012Metric" (layer "F.Cu") + (tstamp d22575fe-eeae-4e33-8079-95b8a28b872b) + (at 146.11 90.21) + (descr "Resistor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") + (tags "resistor") + (property "Sheetfile" "parity_not_in_bom.kicad_sch") + (property "Sheetname" "") + (property "exclude_from_bom" "") + (property "ki_description" "Resistor") + (property "ki_keywords" "R res resistor") + (path "/fe915a0d-788b-436b-b91c-17b812706857") + (attr smd exclude_from_bom) + (fp_text reference "R2" (at 0 -1.65) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 6c0d166e-25bb-45a4-b695-c69a4b50cfcb) + ) + (fp_text value "R" (at 0 1.65) (layer "F.Fab") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp acd644dc-8346-4fcf-baaa-3ae973ac2e7f) + ) + (fp_text user "${REFERENCE}" (at 0 0) (layer "F.Fab") + (effects (font (size 0.5 0.5) (thickness 0.08))) + (tstamp 922f6531-fad7-4af0-bae9-d2a838d28ab5) + ) + (fp_line (start -0.227064 -0.735) (end 0.227064 -0.735) + (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 02ad1c2c-2155-44fe-a999-617e3e26b6ed)) + (fp_line (start -0.227064 0.735) (end 0.227064 0.735) + (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 801a1b3e-eb10-4c50-b990-5600113eecca)) + (fp_line (start -1.68 -0.95) (end 1.68 -0.95) + (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp f4f9b330-946a-419d-a0ea-0791a45e19a6)) + (fp_line (start -1.68 0.95) (end -1.68 -0.95) + (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp e6d471eb-43c2-4c5e-b3d0-0b05ff0d1202)) + (fp_line (start 1.68 -0.95) (end 1.68 0.95) + (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 3c1f14c4-cf78-46c0-96d2-0c75b8736344)) + (fp_line (start 1.68 0.95) (end -1.68 0.95) + (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp dac0fd80-6512-4cad-bc11-8e8b8d585be5)) + (fp_line (start -1 -0.625) (end 1 -0.625) + (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp d7f641d3-d51d-436f-9ed9-c15d3d4ab67a)) + (fp_line (start -1 0.625) (end -1 -0.625) + (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 2e12ae73-a5ce-4694-8479-11a8d34a75b5)) + (fp_line (start 1 -0.625) (end 1 0.625) + (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 92dc906b-5680-4858-b5be-457d0c9d9fb0)) + (fp_line (start 1 0.625) (end -1 0.625) + (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 44c349af-aaa0-4d2a-96eb-8227ef989713)) + (pad "1" smd roundrect (at -0.9125 0) (size 1.025 1.4) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.243902) + (net 1 "Net-(R1-Pad1)") (pintype "passive") (tstamp 6fdb1a9d-290c-41b1-95be-28269a8f25bb)) + (pad "2" smd roundrect (at 0.9125 0) (size 1.025 1.4) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.243902) + (net 2 "Net-(R1-Pad2)") (pintype "passive") (tstamp 55596410-e2e1-4872-ad6a-0f26ec48afb1)) + (model "${KICAD6_3DMODEL_DIR}/Resistor_SMD.3dshapes/R_0805_2012Metric.wrl" + (offset (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (gr_rect (start 139.07 86.08) (end 148.99 93.73) + (stroke (width 0.1) (type solid)) (fill none) (layer "Edge.Cuts") (tstamp 76666355-656c-4bbc-b564-0e519858b554)) + + (segment (start 140.7875 91.7275) (end 141.59 92.53) (width 0.25) (layer "F.Cu") (net 1) (tstamp 1479941e-ba33-4fc7-a01f-38b6929e9fa6)) + (segment (start 145.1975 91.8425) (end 145.1975 90.21) (width 0.25) (layer "F.Cu") (net 1) (tstamp 5e124c25-5aed-47d4-b681-87043a35d032)) + (segment (start 141.59 92.53) (end 144.51 92.53) (width 0.25) (layer "F.Cu") (net 1) (tstamp 65cace76-e388-42c4-89f5-224130d41350)) + (segment (start 144.51 92.53) (end 145.1975 91.8425) (width 0.25) (layer "F.Cu") (net 1) (tstamp 6bdaf2c2-e285-41e3-a359-fdda0fe5f0bb)) + (segment (start 140.7875 90.21) (end 140.7875 91.7275) (width 0.25) (layer "F.Cu") (net 1) (tstamp 6e063370-a136-4b04-9db4-51c9137330af)) + (segment (start 143.16 88.22) (end 146.26 88.22) (width 0.25) (layer "F.Cu") (net 2) (tstamp 0a2fa0f2-3faf-4442-9576-2f87f403922d)) + (segment (start 142.6125 90.21) (end 142.6125 88.7675) (width 0.25) (layer "F.Cu") (net 2) (tstamp 1ce8ab1b-8bf2-4984-bd7c-b354c87d4735)) + (segment (start 147.0225 88.9825) (end 147.0225 90.21) (width 0.25) (layer "F.Cu") (net 2) (tstamp 37605bd2-ca68-40ac-9778-51db8433a277)) + (segment (start 146.26 88.22) (end 147.0225 88.9825) (width 0.25) (layer "F.Cu") (net 2) (tstamp 89ed9d43-6d56-42da-9239-3c16facf2f20)) + (segment (start 142.6125 88.7675) (end 143.16 88.22) (width 0.25) (layer "F.Cu") (net 2) (tstamp e5b31ba0-c473-4a4a-8fc4-f8790529e32d)) + +) diff --git a/tests/board_samples/kicad_7/parity_not_in_bom.kicad_sch b/tests/board_samples/kicad_7/parity_not_in_bom.kicad_sch new file mode 100644 index 00000000..7df1bec4 --- /dev/null +++ b/tests/board_samples/kicad_7/parity_not_in_bom.kicad_sch @@ -0,0 +1,130 @@ +(kicad_sch (version 20230121) (generator eeschema) + + (uuid 3732eaf7-cce4-43cf-b4b9-c9dc29b0959c) + + (paper "A4") + + (lib_symbols + (symbol "Device:R" (pin_numbers hide) (pin_names (offset 0)) (in_bom yes) (on_board yes) + (property "Reference" "R" (at 2.032 0 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "R" (at 0 0 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at -1.778 0 90) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_keywords" "R res resistor" (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_description" "Resistor" (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_fp_filters" "R_*" (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (symbol "R_0_1" + (rectangle (start -1.016 -2.54) (end 1.016 2.54) + (stroke (width 0.254) (type default)) + (fill (type none)) + ) + ) + (symbol "R_1_1" + (pin passive line (at 0 3.81 270) (length 1.27) + (name "~" (effects (font (size 1.27 1.27)))) + (number "1" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at 0 -3.81 90) (length 1.27) + (name "~" (effects (font (size 1.27 1.27)))) + (number "2" (effects (font (size 1.27 1.27)))) + ) + ) + ) + ) + + + (wire (pts (xy 114.3 71.12) (xy 127 71.12)) + (stroke (width 0) (type default)) + (uuid 50547cc0-58b4-41d9-be7a-4dcc3848c41c) + ) + (wire (pts (xy 127 83.82) (xy 127 88.9)) + (stroke (width 0) (type default)) + (uuid 552500c0-f580-4698-b875-06e4f0918a52) + ) + (wire (pts (xy 114.3 76.2) (xy 114.3 71.12)) + (stroke (width 0) (type default)) + (uuid 55e58413-69f9-4248-b7b2-1d7d19738a40) + ) + (wire (pts (xy 127 71.12) (xy 127 76.2)) + (stroke (width 0) (type default)) + (uuid 802a0139-9d26-46a4-9a87-dc3e01d180d3) + ) + (wire (pts (xy 114.3 88.9) (xy 127 88.9)) + (stroke (width 0) (type default)) + (uuid 87a32c0a-4611-4f9e-992d-b6acc65e4801) + ) + (wire (pts (xy 114.3 83.82) (xy 114.3 88.9)) + (stroke (width 0) (type default)) + (uuid e734b7a7-31ad-4fb1-8ade-ff03908bf4ab) + ) + + (symbol (lib_id "Device:R") (at 114.3 80.01 0) (unit 1) + (in_bom yes) (on_board yes) (dnp no) (fields_autoplaced) + (uuid 53197f63-58c2-43cf-a8eb-f753d7ef24dd) + (property "Reference" "R1" (at 116.84 78.7399 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Value" "R" (at 116.84 81.2799 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Footprint" "Resistor_SMD:R_0805_2012Metric" (at 112.522 80.01 90) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 114.3 80.01 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid dbf8df6f-5fd0-456e-816c-06b2932108d3)) + (pin "2" (uuid cbf44ba5-afe1-4251-a560-6315b051b326)) + (instances + (project "parity_not_in_bom" + (path "/3732eaf7-cce4-43cf-b4b9-c9dc29b0959c" + (reference "R1") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:R") (at 127 80.01 0) (unit 1) + (in_bom no) (on_board yes) (dnp no) (fields_autoplaced) + (uuid fe915a0d-788b-436b-b91c-17b812706857) + (property "Reference" "R2" (at 129.54 78.7399 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Value" "R" (at 129.54 81.2799 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Footprint" "Resistor_SMD:R_0805_2012Metric" (at 125.222 80.01 90) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 127 80.01 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 825b933a-362b-4022-a18e-ba18bef3bf92)) + (pin "2" (uuid 6c70b565-558c-4ed1-ac80-3d3de0335385)) + (instances + (project "parity_not_in_bom" + (path "/3732eaf7-cce4-43cf-b4b9-c9dc29b0959c" + (reference "R2") (unit 1) + ) + ) + ) + ) + + (sheet_instances + (path "/" (page "1")) + ) +) diff --git a/tests/board_samples/kicad_8/.gitignore b/tests/board_samples/kicad_8/.gitignore index 123e99e3..ffbd86a5 100644 --- a/tests/board_samples/kicad_8/.gitignore +++ b/tests/board_samples/kicad_8/.gitignore @@ -6,3 +6,4 @@ fp-info-cache *-backups pcb_parity.xml batteryPack.kicad_prl +parity_not_in_bom.xml diff --git a/tests/board_samples/kicad_8/parity_not_in_bom.kicad_pcb b/tests/board_samples/kicad_8/parity_not_in_bom.kicad_pcb new file mode 100644 index 00000000..9f877f06 --- /dev/null +++ b/tests/board_samples/kicad_8/parity_not_in_bom.kicad_pcb @@ -0,0 +1,208 @@ +(kicad_pcb (version 20221018) (generator pcbnew) + + (general + (thickness 1.6) + ) + + (paper "A4") + (layers + (0 "F.Cu" signal) + (31 "B.Cu" signal) + (32 "B.Adhes" user "B.Adhesive") + (33 "F.Adhes" user "F.Adhesive") + (34 "B.Paste" user) + (35 "F.Paste" user) + (36 "B.SilkS" user "B.Silkscreen") + (37 "F.SilkS" user "F.Silkscreen") + (38 "B.Mask" user) + (39 "F.Mask" user) + (40 "Dwgs.User" user "User.Drawings") + (41 "Cmts.User" user "User.Comments") + (42 "Eco1.User" user "User.Eco1") + (43 "Eco2.User" user "User.Eco2") + (44 "Edge.Cuts" user) + (45 "Margin" user) + (46 "B.CrtYd" user "B.Courtyard") + (47 "F.CrtYd" user "F.Courtyard") + (48 "B.Fab" user) + (49 "F.Fab" user) + (50 "User.1" user) + (51 "User.2" user) + (52 "User.3" user) + (53 "User.4" user) + (54 "User.5" user) + (55 "User.6" user) + (56 "User.7" user) + (57 "User.8" user) + (58 "User.9" user) + ) + + (setup + (pad_to_mask_clearance 0) + (pcbplotparams + (layerselection 0x00010fc_ffffffff) + (plot_on_all_layers_selection 0x0000000_00000000) + (disableapertmacros false) + (usegerberextensions false) + (usegerberattributes true) + (usegerberadvancedattributes true) + (creategerberjobfile true) + (dashed_line_dash_ratio 12.000000) + (dashed_line_gap_ratio 3.000000) + (svgprecision 6) + (plotframeref false) + (viasonmask false) + (mode 1) + (useauxorigin false) + (hpglpennumber 1) + (hpglpenspeed 20) + (hpglpendiameter 15.000000) + (dxfpolygonmode true) + (dxfimperialunits true) + (dxfusepcbnewfont true) + (psnegative false) + (psa4output false) + (plotreference true) + (plotvalue true) + (plotinvisibletext false) + (sketchpadsonfab false) + (subtractmaskfromsilk false) + (outputformat 1) + (mirror false) + (drillshape 1) + (scaleselection 1) + (outputdirectory "") + ) + ) + + (property "MYVAR" "tests/data") + (property "PRUEBITA" "Hola!") + + (net 0 "") + (net 1 "Net-(R1-Pad1)") + (net 2 "Net-(R1-Pad2)") + + (footprint "Resistor_SMD:R_0805_2012Metric" (layer "F.Cu") + (tstamp 71391f61-a293-4f48-90fc-560a7915df90) + (at 141.7 90.21) + (descr "Resistor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") + (tags "resistor") + (property "Sheetfile" "parity_not_in_bom.kicad_sch") + (property "Sheetname" "") + (property "ki_description" "Resistor") + (property "ki_keywords" "R res resistor") + (path "/53197f63-58c2-43cf-a8eb-f753d7ef24dd") + (attr smd) + (fp_text reference "R1" (at 0 -1.65) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 7b2615b6-a345-4b0f-99b6-86e596033ed3) + ) + (fp_text value "R" (at 0 1.65) (layer "F.Fab") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 5290912d-ff49-4c4c-b4e3-50b9698dd21f) + ) + (fp_text user "${REFERENCE}" (at 0 0) (layer "F.Fab") + (effects (font (size 0.5 0.5) (thickness 0.08))) + (tstamp eb04c778-b915-4ef5-a2a4-7105bd2f4240) + ) + (fp_line (start -0.227064 -0.735) (end 0.227064 -0.735) + (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp b0208b82-bc34-4e1f-8c1d-10c6625fa24e)) + (fp_line (start -0.227064 0.735) (end 0.227064 0.735) + (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 041c7c60-ec2d-4320-905a-23b4d81b9953)) + (fp_line (start -1.68 -0.95) (end 1.68 -0.95) + (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp cd03aab6-fb56-4749-955c-8702606368c0)) + (fp_line (start -1.68 0.95) (end -1.68 -0.95) + (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp a9ea8b5b-4a6e-4d9d-b048-252fc1412ecc)) + (fp_line (start 1.68 -0.95) (end 1.68 0.95) + (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 0d6b5b31-ccaf-4919-81ac-e61b309d843c)) + (fp_line (start 1.68 0.95) (end -1.68 0.95) + (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 21aa6277-8a7a-4c94-a5f7-017929a9b2ff)) + (fp_line (start -1 -0.625) (end 1 -0.625) + (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp a2c86f64-3d5d-44f3-bd2b-3d3ba76a1534)) + (fp_line (start -1 0.625) (end -1 -0.625) + (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp b293f011-f92a-4975-9065-a7f8b42ad6e4)) + (fp_line (start 1 -0.625) (end 1 0.625) + (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 8d86c185-7ab4-410b-a7e0-f3b951d5d0e1)) + (fp_line (start 1 0.625) (end -1 0.625) + (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 0e9b16bf-7aaf-45bb-bf13-46ff64c7194e)) + (pad "1" smd roundrect (at -0.9125 0) (size 1.025 1.4) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.243902) + (net 1 "Net-(R1-Pad1)") (pintype "passive") (tstamp a8ef74a0-4909-496a-89c3-192e03d40865)) + (pad "2" smd roundrect (at 0.9125 0) (size 1.025 1.4) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.243902) + (net 2 "Net-(R1-Pad2)") (pintype "passive") (tstamp d086af99-eb9a-43cd-a4a8-5fa85bf21c7b)) + (model "${KICAD6_3DMODEL_DIR}/Resistor_SMD.3dshapes/R_0805_2012Metric.wrl" + (offset (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (footprint "Resistor_SMD:R_0805_2012Metric" (layer "F.Cu") + (tstamp d22575fe-eeae-4e33-8079-95b8a28b872b) + (at 146.11 90.21) + (descr "Resistor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") + (tags "resistor") + (property "Sheetfile" "parity_not_in_bom.kicad_sch") + (property "Sheetname" "") + (property "exclude_from_bom" "") + (property "ki_description" "Resistor") + (property "ki_keywords" "R res resistor") + (path "/fe915a0d-788b-436b-b91c-17b812706857") + (attr smd exclude_from_bom) + (fp_text reference "R2" (at 0 -1.65) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 6c0d166e-25bb-45a4-b695-c69a4b50cfcb) + ) + (fp_text value "R" (at 0 1.65) (layer "F.Fab") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp acd644dc-8346-4fcf-baaa-3ae973ac2e7f) + ) + (fp_text user "${REFERENCE}" (at 0 0) (layer "F.Fab") + (effects (font (size 0.5 0.5) (thickness 0.08))) + (tstamp 922f6531-fad7-4af0-bae9-d2a838d28ab5) + ) + (fp_line (start -0.227064 -0.735) (end 0.227064 -0.735) + (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 02ad1c2c-2155-44fe-a999-617e3e26b6ed)) + (fp_line (start -0.227064 0.735) (end 0.227064 0.735) + (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 801a1b3e-eb10-4c50-b990-5600113eecca)) + (fp_line (start -1.68 -0.95) (end 1.68 -0.95) + (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp f4f9b330-946a-419d-a0ea-0791a45e19a6)) + (fp_line (start -1.68 0.95) (end -1.68 -0.95) + (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp e6d471eb-43c2-4c5e-b3d0-0b05ff0d1202)) + (fp_line (start 1.68 -0.95) (end 1.68 0.95) + (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 3c1f14c4-cf78-46c0-96d2-0c75b8736344)) + (fp_line (start 1.68 0.95) (end -1.68 0.95) + (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp dac0fd80-6512-4cad-bc11-8e8b8d585be5)) + (fp_line (start -1 -0.625) (end 1 -0.625) + (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp d7f641d3-d51d-436f-9ed9-c15d3d4ab67a)) + (fp_line (start -1 0.625) (end -1 -0.625) + (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 2e12ae73-a5ce-4694-8479-11a8d34a75b5)) + (fp_line (start 1 -0.625) (end 1 0.625) + (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 92dc906b-5680-4858-b5be-457d0c9d9fb0)) + (fp_line (start 1 0.625) (end -1 0.625) + (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 44c349af-aaa0-4d2a-96eb-8227ef989713)) + (pad "1" smd roundrect (at -0.9125 0) (size 1.025 1.4) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.243902) + (net 1 "Net-(R1-Pad1)") (pintype "passive") (tstamp 6fdb1a9d-290c-41b1-95be-28269a8f25bb)) + (pad "2" smd roundrect (at 0.9125 0) (size 1.025 1.4) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.243902) + (net 2 "Net-(R1-Pad2)") (pintype "passive") (tstamp 55596410-e2e1-4872-ad6a-0f26ec48afb1)) + (model "${KICAD6_3DMODEL_DIR}/Resistor_SMD.3dshapes/R_0805_2012Metric.wrl" + (offset (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (gr_rect (start 139.07 86.08) (end 148.99 93.73) + (stroke (width 0.1) (type solid)) (fill none) (layer "Edge.Cuts") (tstamp 76666355-656c-4bbc-b564-0e519858b554)) + + (segment (start 140.7875 91.7275) (end 141.59 92.53) (width 0.25) (layer "F.Cu") (net 1) (tstamp 1479941e-ba33-4fc7-a01f-38b6929e9fa6)) + (segment (start 145.1975 91.8425) (end 145.1975 90.21) (width 0.25) (layer "F.Cu") (net 1) (tstamp 5e124c25-5aed-47d4-b681-87043a35d032)) + (segment (start 141.59 92.53) (end 144.51 92.53) (width 0.25) (layer "F.Cu") (net 1) (tstamp 65cace76-e388-42c4-89f5-224130d41350)) + (segment (start 144.51 92.53) (end 145.1975 91.8425) (width 0.25) (layer "F.Cu") (net 1) (tstamp 6bdaf2c2-e285-41e3-a359-fdda0fe5f0bb)) + (segment (start 140.7875 90.21) (end 140.7875 91.7275) (width 0.25) (layer "F.Cu") (net 1) (tstamp 6e063370-a136-4b04-9db4-51c9137330af)) + (segment (start 143.16 88.22) (end 146.26 88.22) (width 0.25) (layer "F.Cu") (net 2) (tstamp 0a2fa0f2-3faf-4442-9576-2f87f403922d)) + (segment (start 142.6125 90.21) (end 142.6125 88.7675) (width 0.25) (layer "F.Cu") (net 2) (tstamp 1ce8ab1b-8bf2-4984-bd7c-b354c87d4735)) + (segment (start 147.0225 88.9825) (end 147.0225 90.21) (width 0.25) (layer "F.Cu") (net 2) (tstamp 37605bd2-ca68-40ac-9778-51db8433a277)) + (segment (start 146.26 88.22) (end 147.0225 88.9825) (width 0.25) (layer "F.Cu") (net 2) (tstamp 89ed9d43-6d56-42da-9239-3c16facf2f20)) + (segment (start 142.6125 88.7675) (end 143.16 88.22) (width 0.25) (layer "F.Cu") (net 2) (tstamp e5b31ba0-c473-4a4a-8fc4-f8790529e32d)) + +) diff --git a/tests/board_samples/kicad_8/parity_not_in_bom.kicad_sch b/tests/board_samples/kicad_8/parity_not_in_bom.kicad_sch new file mode 100644 index 00000000..7df1bec4 --- /dev/null +++ b/tests/board_samples/kicad_8/parity_not_in_bom.kicad_sch @@ -0,0 +1,130 @@ +(kicad_sch (version 20230121) (generator eeschema) + + (uuid 3732eaf7-cce4-43cf-b4b9-c9dc29b0959c) + + (paper "A4") + + (lib_symbols + (symbol "Device:R" (pin_numbers hide) (pin_names (offset 0)) (in_bom yes) (on_board yes) + (property "Reference" "R" (at 2.032 0 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "R" (at 0 0 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at -1.778 0 90) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_keywords" "R res resistor" (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_description" "Resistor" (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_fp_filters" "R_*" (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (symbol "R_0_1" + (rectangle (start -1.016 -2.54) (end 1.016 2.54) + (stroke (width 0.254) (type default)) + (fill (type none)) + ) + ) + (symbol "R_1_1" + (pin passive line (at 0 3.81 270) (length 1.27) + (name "~" (effects (font (size 1.27 1.27)))) + (number "1" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at 0 -3.81 90) (length 1.27) + (name "~" (effects (font (size 1.27 1.27)))) + (number "2" (effects (font (size 1.27 1.27)))) + ) + ) + ) + ) + + + (wire (pts (xy 114.3 71.12) (xy 127 71.12)) + (stroke (width 0) (type default)) + (uuid 50547cc0-58b4-41d9-be7a-4dcc3848c41c) + ) + (wire (pts (xy 127 83.82) (xy 127 88.9)) + (stroke (width 0) (type default)) + (uuid 552500c0-f580-4698-b875-06e4f0918a52) + ) + (wire (pts (xy 114.3 76.2) (xy 114.3 71.12)) + (stroke (width 0) (type default)) + (uuid 55e58413-69f9-4248-b7b2-1d7d19738a40) + ) + (wire (pts (xy 127 71.12) (xy 127 76.2)) + (stroke (width 0) (type default)) + (uuid 802a0139-9d26-46a4-9a87-dc3e01d180d3) + ) + (wire (pts (xy 114.3 88.9) (xy 127 88.9)) + (stroke (width 0) (type default)) + (uuid 87a32c0a-4611-4f9e-992d-b6acc65e4801) + ) + (wire (pts (xy 114.3 83.82) (xy 114.3 88.9)) + (stroke (width 0) (type default)) + (uuid e734b7a7-31ad-4fb1-8ade-ff03908bf4ab) + ) + + (symbol (lib_id "Device:R") (at 114.3 80.01 0) (unit 1) + (in_bom yes) (on_board yes) (dnp no) (fields_autoplaced) + (uuid 53197f63-58c2-43cf-a8eb-f753d7ef24dd) + (property "Reference" "R1" (at 116.84 78.7399 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Value" "R" (at 116.84 81.2799 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Footprint" "Resistor_SMD:R_0805_2012Metric" (at 112.522 80.01 90) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 114.3 80.01 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid dbf8df6f-5fd0-456e-816c-06b2932108d3)) + (pin "2" (uuid cbf44ba5-afe1-4251-a560-6315b051b326)) + (instances + (project "parity_not_in_bom" + (path "/3732eaf7-cce4-43cf-b4b9-c9dc29b0959c" + (reference "R1") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:R") (at 127 80.01 0) (unit 1) + (in_bom no) (on_board yes) (dnp no) (fields_autoplaced) + (uuid fe915a0d-788b-436b-b91c-17b812706857) + (property "Reference" "R2" (at 129.54 78.7399 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Value" "R" (at 129.54 81.2799 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Footprint" "Resistor_SMD:R_0805_2012Metric" (at 125.222 80.01 90) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 127 80.01 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 825b933a-362b-4022-a18e-ba18bef3bf92)) + (pin "2" (uuid 6c70b565-558c-4ed1-ac80-3d3de0335385)) + (instances + (project "parity_not_in_bom" + (path "/3732eaf7-cce4-43cf-b4b9-c9dc29b0959c" + (reference "R2") (unit 1) + ) + ) + ) + ) + + (sheet_instances + (path "/" (page "1")) + ) +) diff --git a/tests/test_plot/test_preflight.py b/tests/test_plot/test_preflight.py index d959def5..284f3d79 100644 --- a/tests/test_plot/test_preflight.py +++ b/tests/test_plot/test_preflight.py @@ -217,6 +217,24 @@ def test_update_xml_2(test_dir): ctx.clean_up() +@pytest.mark.slow +@pytest.mark.eeschema +@pytest.mark.skipif(context.ki5() or context.ki8(), reason="KiCad 6+ implementation") +def test_update_xml_not_in_bom(test_dir): + prj = 'parity_not_in_bom' + ctx = context.TestContext(test_dir, prj, 'update_xml_2', '') + # The XML should be created where the schematic is located + xml = os.path.abspath(os.path.join(ctx.get_board_dir(), prj+'.xml')) + ctx.run() + # Check all outputs are there + assert os.path.isfile(xml) + assert os.path.getsize(xml) > 0 + logging.debug(os.path.basename(xml)+' OK') + if context.ki6() and not context.ki7(): + ctx.search_err("R2 excluded from BoM") + ctx.clean_up() + + @pytest.mark.slow @pytest.mark.eeschema def test_update_xml_fail(test_dir):