KiCad automation utility
Go to file
Salvador E. Tropea e9a17d351c Fixed pytest name for Debian (pytest-3) 2020-04-28 18:32:27 -03:00
.github/workflows Fixed pytest name for Debian (pytest-3) 2020-04-28 18:32:27 -03:00
debian Added python3-pytest to the build dependencies. Enough to make them run. 2020-04-28 17:03:12 -03:00
docs/samples
kiplot Tunned flake8 and removed all unfiltered warnings and errors 2020-04-28 17:56:50 -03:00
src Give more priority to local module instead of installed. 2020-03-13 10:55:49 -03:00
tests Tunned flake8 and removed all unfiltered warnings and errors 2020-04-28 17:56:50 -03:00
.flake8 Tunned flake8 and removed all unfiltered warnings and errors 2020-04-28 17:56:50 -03:00
.gitignore Added debian package build files to the ignore list 2020-04-23 14:38:10 -03:00
LICENSE
MANIFEST.in Moved the module to the root and added a script named kiplot to call it from /usr/bin. 2020-03-10 14:49:18 -03:00
Makefile Tunned flake8 and removed all unfiltered warnings and errors 2020-04-28 17:56:50 -03:00
README.md Added --list option to the README and some information about odcker images and CI/CD 2020-04-24 09:59:16 -03:00
setup.cfg
setup.py Tunned flake8 and removed all unfiltered warnings and errors 2020-04-28 17:56:50 -03:00

README.md

KiPlot

KiPlot is a program which helps you to plot your KiCad PCBs to output formats easily, repeatable, and most of all, scriptably. This means you can use a Makefile to export your KiCad PCBs just as needed.

For example, it's common that you might want for each board rev:

  • Check ERC/DRC one last time (using KiCad Automation Scripts)
  • Gerbers, drills and drill maps for a fab in their favourite format
  • Fab docs for the assembler
  • Pick and place files

You want to do this in a one-touch way, and make sure everything you need to do so it securely saved in version control, not on the back of an old datasheet.

KiPlot lets you do this.

As a side effect of providing a scriptable plot driver for KiCad, KiPlot also allows functional testing of KiCad plot functions, which would otherwise be somewhat unwieldy to write.

The configuration file

Kiplot uses a configuration file where you can specify what outputs to generate. By default you'll generate all of them, but you can specify which ones from the command line.

The configuration file should be named *.kiplot.yaml. The format used is YAML. This is basically a text file with some structure.

The header

All configuration files must start with:

kiplot:
  version: 1

This tells to Kiplot that this file is using version 1 of the format.

The preflight section

This section is used to specify tasks that will executed before generating any output. The available tasks are:

  • run_erc To run the ERC (Electrical Rules Check). To ensure the schematic is electrically correct.
  • run_drc To run the DRC (Distance Rules Check). To ensure we have a valid PCB.
  • update_xml To update the XML version of the BoM (Bill of Materials). To ensure our generated BoM is up to date.

The run_drc command has the following options:

  • check_zone_fills Every time we run the DRC the zones are filled again. This option saves the PCB to disk updating the zones.
  • ignore_unconnected Ignores the unconnected nets. Useful if you didn't finish the routing.

Here is an example of a preflight section:

preflight:
  run_erc: true
  update_xml: true
  run_drc: true
  check_zone_fills: true
  ignore_unconnected: false

The outputs section

In this section you put all the things that you want to generate. This section contains one or more outputs. Each output contain the following data:

  • name a name so you can easily identify it.
  • comment a short description of this output.
  • type selects which type of output will be generated. Examples are gerbers, drill files and pick & place files
  • dir is the directory where this output will be stored.
  • options contains one or more options to configure this output.
  • layers a list of layers used for this output. Not all outputs needs this subsection.

The available values for type are:

  • Plot formats:
    • gerber the gerbers for fabrication.
    • ps postscript plot
    • hpgl format for laser printers
    • svg scalable vector graphics
    • pdf portable document format
    • dxf mechanical CAD format
  • Drill formats:
    • excellon data for the drilling machine
    • gerb_drill drilling positions in a gerber file
  • Pick & place
    • position of the components for the pick & place machine
  • Documentation
    • pdf_sch_print schematic in PDF format
    • pdf_pcb_printPDF file containing one or more layer and the page frame
  • Bill of Materials

Here is an example of a configuration file to generate the gerbers for the top and bottom layers:

kiplot:
  version: 1

preflight:
  run_drc: true

outputs:

  - name: 'gerbers'
    comment: "Gerbers for the board house"
    type: gerber
    dir: gerberdir
    options:
      # generic layer options
      exclude_edge_layer: false
      exclude_pads_from_silkscreen: false
      plot_sheet_reference: false
      plot_footprint_refs: true
      plot_footprint_values: true
      force_plot_invisible_refs_vals: false
      tent_vias: true
      check_zone_fills: true
      line_width: 0.15

      # gerber options
      use_aux_axis_as_origin: false
      subtract_mask_from_silk: true
      use_protel_extensions: false
      gerber_precision: 4.5
      create_gerber_job_file: true
      use_gerber_x2_attributes: true
      use_gerber_net_attributes: false

    layers:
      - layer: F.Cu
        suffix: F_Cu
      - layer: B.Cu
        suffix: B_Cu

Most options are the same you'll find in the KiCad dialogs.

General options for plot formats

  • exclude_edge_layer do not include the PCB edge layer
  • exclude_pads_from_silkscreen do not plot the component pads in the silk screen
  • plot_sheet_reference currently without effect
  • plot_footprint_refs include the footprint references
  • plot_footprint_values include the footprint values
  • force_plot_invisible_refs_vals include references and values even when they are marked as invisible
  • tent_vias cover the vias
  • check_zone_fills currently without effect

Note that each layer is generated in a separated file.

Gerber options

  • line_width for objects without width (floating point value in mm)
  • use_aux_axis_as_origin use the auxiliar axis as origin for coordinates
  • subtract_mask_from_silk substract the solder mask from the silk screen
  • use_protel_extensions use legacy Protel file extensions
  • gerber_precision this the gerber coordinate format, can be 4.5 or 4.6
  • create_gerber_job_file creates a file with information about all the generated gerbers. You can use it in gerbview to load all gerbers at once.
  • use_gerber_x2_attributes use the extended X2 format
  • use_gerber_net_attributes include netlist metadata

PS options

  • line_width for objects without width (floating point value in mm)
  • mirror_plot plot mirrored
  • negative_plot invert black and white
  • scaling scale factor
  • drill_marks what to use to indicate the drill places, can be none, small or full (for real scale)
  • scale_adjust_x fine grain adjust for the X scale (floating point multiplier)
  • scale_adjust_y fine grain adjust for the Y scale (floating point multiplier)
  • a4_output force A4 paper size

SVG and PDF options

  • line_width for objects without width (floating point value in mm)
  • mirror_plot plot mirrored
  • negative_plot invert black and white
  • drill_marks what to use to indicate the drill places, can be none, small or full (for real scale)

HPGL options

  • mirror_plot plot mirrored
  • scaling scale factor
  • drill_marks what to use to indicate the drill places, can be none, small or full (for real scale)
  • pen_width default trace width

DXF options

  • drill_marks what to use to indicate the drill places, can be none, small or full (for real scale)
  • polygon_mode plot using the contour, instead of the center line

General drill options

  • use_aux_axis_as_origin use the auxiliar axis as origin for coordinates
  • map this is an optional subsection to indicate the format for a graphical drill map. The valid formats are hpgl, ps, gerber, dxf, svg and pdf. Example:
      map:
        type: 'pdf'
  • report this is an optional subsection to indicate the name of the drill report, example:
      report:
        filename: 'Project-drl.rpt'

Excellon drill options

  • metric_units use metric units instead of inches.
  • pth_and_npth_single_file generate one file for both, plated holes and non-plated holes, instead of two separated files.
  • minimal_header use a minimal header in the file
  • mirror_y_axis invert the Y axis

Position options

  • format can be ascii or csv.
  • units can be millimeters or inches.
  • separate_files_for_front_and_back generate two separated files, one for the top and another for the bottom.
  • only_smd only include the surface mount components.

pdf_pcb_print options

  • output_name filename for the output PDF

KiBoM options

  • format can be html or csv.

IBoM options

  • blacklist regular expression for the components to exclude (using the Config field)
  • name_format format of the output name, example: %f_%r_iBoM will generate a file with revision and _iBoM.

pdf_sch_print options

  • output filename for the output PDF

Using KiPlot

If the current directory contains only one PCB file and only one configuration file (named *.kiplot.yaml) you can just call kiplot. No arguments needed. The tool will figure out which files to use.

If more than one file is found in the current directory kiplot will use the first found and issue a warning. If you need to use other file just tell it explicitly:

kiplot -b PCB_FILE.kicad_pcb -c CONFIG.kiplot.yaml

A simple target can be added to your makefile, so you can just run make pcb_files or integrate into your current build process.

pcb_files:
    kiplot -b $(PCB) -c $(KIPLOT_CFG)

If you need to supress messages use --quiet or -q and if you need to get more informatio about what's going on use --verbose or -v.

If you want to generate only some of the outputs use:

kiplot OUTPUT_1 OUTPUT_2

If you want to generate all outputs with some exceptions use:

kiplot --invert-sel OUTPUT_1 OUTPUT_2

If you want to skip the DRC and ERC use:

kiplot --skip-pre run_erc,run_drc

If you want to skip all the preflight tasks use:

kiplot --skip-pre all

All outputs are generated using the current directory as base. If you want to use another directory as base use:

kiplot --out-dir OTHER_PLACE

If you want to list the available outputs defined in the configuration file use:

kiplot --list

Installing

Dependencies

Installation on Ubuntu/Debian:

Get the Debian package from the releases section and run:

sudo apt install ./kiplot.inti-cmnb_*_all.deb

Installation on other targets

  • Install KiCad 5.x
  • Install Python 3.5 or newer
  • Install the Python Yaml module
  • Run the script src/kiplot

Using for CI/CD

When using a GitHub or GitLab repo you can use KiPlot to generate all the needed stuff each time you commit a change to the schematic and/or PCB file.

Examples of how to do it can be found here for GitHub and here for GitLab.

In order to run KiPlot on these environments you need a lot of software installed. The usual mechanism to achieve this is using docker. Docker images containing KiPlot, all the supporting scripts and a corresponding KiCad can be found at Docker Hub as setsoft/kicad_auto:latest. This image is based on setsoft/kicad_debian:latest, containing KiCad on Debian GNU/Linux.

For more information about the docker images visit kicad_debian and kicad_auto.