add PnP export
This commit is contained in:
parent
6d62658212
commit
8490dbbda9
|
@ -12,6 +12,7 @@
|
|||
*.notes.txt
|
||||
*.bom.csv
|
||||
*.cost.csv
|
||||
*.cpl.csv
|
||||
*.json
|
||||
*.rb
|
||||
geda/footprints/
|
||||
|
|
18
Rakefile
18
Rakefile
|
@ -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
|
||||
|
||||
|
|
|
@ -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"
|
||||
|
||||
|
|
@ -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;
|
Loading…
Reference in New Issue