add PnP export

This commit is contained in:
King Kévin 2021-11-02 17:02:42 +01:00
parent 6d62658212
commit 8490dbbda9
4 changed files with 78 additions and 4 deletions

1
.gitignore vendored
View File

@ -12,6 +12,7 @@
*.notes.txt
*.bom.csv
*.cost.csv
*.cpl.csv
*.json
*.rb
geda/footprints/

View File

@ -33,7 +33,7 @@ qeda = "qeda"
# ==========
desc "main building task"
task :default => [:print, :fabrication, :bom]
task :default => [:print, :fabrication, :bom, :pnp]
desc "print schematic and layout (as pdf)"
prints = [ "#{name}.sch.pdf", "#{name}.brd.pdf", "#{name}.brd-top.svg", "#{name}.brd-bottom.svg" ]
@ -56,7 +56,7 @@ task :library do
sh "#{qeda} generate ."
end
desc "export netlist from schematic"
desc "export netlist"
net = [ "#{name}.tdx" ]
task :netlist => net
CLOBBER.include(net)
@ -66,11 +66,16 @@ notes = [ "#{name}.notes.txt" ]
task :notes => notes
CLOBBER.include(notes)
desc "export BOMs from schematic"
desc "export BOM"
boms = [ "#{name}.bom.csv" ]
task :bom => boms
CLOBBER.include(boms)
desc "export PnP placement"
pnps = [ "#{name}.cpl.csv" ]
task :pnp => pnps
CLOBBER.include(pnps)
# ===============
# file generation
# ===============
@ -143,6 +148,12 @@ rule ".bom.csv" => ".sch" do |t|
end
end
desc "generate pick-and-place file from board"
rule ".cpl.csv" => [".lht", "mass_prop.sh", "pnp_fab.tab"] do |t|
sh "./mass_prop.sh #{t.prerequisites[0]} pnp_fab.tab" # add fab placement offsets
sh "pcb-rnd -x XY --xyfile #{t.name} --xy-unit mm --format 'JLCPCB' --vendor jlcpcb #{t.prerequisites[0]}" # export XY file in JLCPCB format
end
# ================
# helper functions
# ================
@ -178,4 +189,3 @@ def bom2(schematic, attributes)
end
return to_return
end

58
mass_prop.sh Executable file
View File

@ -0,0 +1,58 @@
#!/bin/sh
if test ! $# -eq 2
then
echo "Need two arguments: a board file name and a tab file name" >&2
exit 1
fi
board="$1"
tab="$2"
if test ! -f "$board"
then
echo "Board file $board not found" >&2
exit 1
fi
if test ! -f "$tab"
then
echo "Tab file $tab not found" >&2
exit 1
fi
btmp=.tmp.$board
awk -F "[ \t]*[;][ \t]*" -v "outfn=$btmp" '
BEGIN { sq = "'\''" }
# quote s with single quotes and remove any single quote from it
# (pcb-rnd action syntax does not have escaping)
function squote(s)
{
gsub("[" sq "]", ".", s)
return sq s sq
}
# ignore comments
/^[ \t]*#/ { next }
# generate an unselect-query-propset sequence for each line
(NF > 1) {
print "Unselect(all)"
print "query(select, " squote($1) ")"
for(n = 2; n <= NF; n++) {
if (split($n, A, "=") == 2)
print "propset(selection, " squote(A[1]) "," squote(A[2]) ")"
}
}
END {
print "Unselect(all)"
print "Save(LayoutAs, " squote(outfn) ")"
}
' < "$tab" | pcb-rnd --gui batch "$board" && mv "$btmp" "$board"

5
pnp_fab.tab Normal file
View File

@ -0,0 +1,5 @@
@.a.footprint == "LEDC2012X80N.lht"; a/xy::jlcpcb::rotate=270;
@.a.footprint == "RESC1608X55N.lht"; a/xy::jlcpcb::rotate=90;
@.a.footprint == "CONNECTOR_USB_MICRO-B_C10418.lht"; a/xy::jlcpcb::translate=-1.2mm,0mm;
@.a.footprint == "CONNECTOR_USB_MICRO-B_C10418.lht"; a/xy::jlcpcb::rotate=270;
@.a.footprint == "CONNECTOR_USB-A-2.0_RECEPTACLE_C42428.lht"; a/xy::jlcpcb::translate=0mm,-1.7mm;