PCB/FPC 智能拼版:四层级计算链路与多边形放置引擎的设计与实现
PCB/FPC 智能拼版四层级计算链路与多边形放置引擎的设计与实现一、问题背景在 PCB印制电路板和 FPC柔性线路板制造行业板材原材料成本在总生产成本中占比极高。拼版排版这道工序决定了多少面积的产品能从一张基材大板上切出——利用率每提升 1%都是真金白银的利润。但拼版排版的现状是绝大多数工厂仍依赖工程人员凭经验手动排布。问题在于组合空间巨大一块大板排多少行、多少列单板 0° 还是 90° 放置不同工序的工艺边怎么留——排列组合多到人脑无法穷举。异形板难度陡增矩形板是基础题L 形、T 形、十字形的 FPC 软板才是真正的考验。人工做异形相嵌排版出错率极高。四层级嵌套PCB 拼版不是一维问题——从单片Pcs到出货片Set到生产小板WPnl再到基材大板Sheet每一层都对上一层的结果有依赖。本文记录 PCB 最佳化拼版系统的核心算法设计包括四层级计算链路、基于 JTS 的多边形放置引擎、12 种 AB 板策略以及效果验证数据。二、四层级计算链路Pcs → Set → WPnl → SheetPCB 拼版的独特性在于它不是把单板排进大板这么简单而是四层嵌套结构┌──────┐ ┌──────┐ ┌────────┐ ┌────────┐ │ Pcs │───▶│ Set │───▶│ WPnl │───▶│ Sheet │ │ 单片 │ │ 出货片│ │ 生产小板│ │ 基材大板│ └──────┘ └──────┘ └────────┘ └────────┘2.1 Pcs → Set单片组成出货片客户真正需要的是出货片Set一个 Set 上通常拼了多个 Pcs。加上四边的折断边Breakaway Edge才是一个完整的出货单元。// FourLevelCalculator.buildPcsLevel()Set宽度cols ×Pcs宽度(cols-1)× 间距左折断边右折断边Set高度rows ×Pcs长度(rows-1)× 间距上折断边下折断边四个方向的折断边各自独立配置最小宽度 / 最大宽度系统会自动尝试 4 种折断边交换配置选择面积最小的方案// autoReverseBreakaway: 尝试 4 种折断边交换// 例上折断边与下折断边交换、左与右交换找出 Set 面积最小组合同时支持 Set 尺寸约束minWidth/maxWidth, minLength/maxLength防止生成的 Set 超出设备处理范围。2.2 Set → WPnl出货片排入生产小板这一步的搜索空间最大。系统采用 20×20 网格枚举策略// FourLevelCalculator.calcSetToWpnl()for(introwsminRows;rowsmaxRows;rows){for(intcolsminCols;colsmaxCols;cols){// 计算 WPnl 候选尺寸// 每个候选评估 3 种放置策略evaluateStandard(rows,cols);// 标准矩形网格evaluateStaggered(rows,cols);// 花式拼奇偶行偏移evaluateHvMaterial(rows,cols);// 横直料横竖交替}}// 评选标准总 Set 数多者优先相同时利用率高者优先三种放置策略的核心差异策略排列方式适用场景标准矩形行列对齐网格常规矩形板花式拼Staggered奇数行右移 50% 单元宽度FPC 窄条、柔性板横直料HV Material横竖交替放置板材纹向有要求花式拼的列数计算偶数行: cols floor((有效宽度 gap) / (cellW gap)) 奇数行: cols floor((有效宽度 - cellW × 0.5 gap) / (cellW gap))工整的偏移让奇数行凸起嵌入偶数行间隙中减少上下方向的板材浪费。2.3 WPnl → Sheet生产小板排入基材大板最后一层是开料把 WPnl 排列到基材大板上。这层引入了**中裁Center Cut**的概念——对于超长板可以按行/列切分成子区域// 四种中裁模式enumCutMode{NONE,// 标准矩形网格HORIZONTAL,// 水平分区 底部剩余补充VERTICAL,// 垂直分区 右侧剩余补充MIXED// 横竖同时分区形成格子布局}// MIXED 模式计算水平分区数floor((Sheet长中裁宽)/(行数 ×WPnl长(行数-1)× 间距中裁宽))垂直分区数floor((Sheet宽中裁宽)/(列数 ×WPnl宽(列数-1)× 间距中裁宽))总WPnl数水平分区 × 垂直分区 × 行数 × 列数工艺边处理支持 NONE / SINGLE / OPPOSITE / ALL 四种模式由ProcessEdgeUtils统一处理。三、多边形放置引擎异形板的解法矩形板排布是基础题真正拉开差距的是异形板。PCB/FPC 行业大量存在 L 形连接板、T 形驱动板、十字形、弧形等非矩形外形。3.1 为什么不用外接矩形传统做法是把异形板的外接矩形Bounding Box当作占位区域来排。问题很明显——一个 L 形板外接矩形面积可能是真实面积的 1.6 倍L 形板真实面积: 约 6 平方单位 外接矩形面积: 约 10 平方单位 如果用 bbox 排 → 利用率虚高实际浪费 40% 空间解决方案使用 JTS Topology Suite 对真实多边形轮廓进行碰撞检测而非外接矩形。3.2 核心类架构┌─────────────────────────────────────────────────┐ │ MultiUnitPanelOptimizer │ │ 遍历 boardIds × (m,n) 切割组合 │ │ 对每个工作板同时运行条带分配 多边形引擎取最优 │ │ 利用率 Σ(真实多边形面积) / 工作板面积 │ └────────────────────┬────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────┐ │ StrategySelector.selectAndPlace() │ │ 根据 ShapeClassifier 形状分类自动选择策略 │ │ 并行运行所有适用策略取利用率最优 │ │ │ │ ┌──────────┐ ┌──────────────┐ ┌──────────┐ │ │ │BottomLeft│ │InterleavedRow│ │Staggered │ │ │ │Strategy │ │Strategy │ │Strategy │ │ │ │(贪心底左) │ │(混排行) │ │(错缝排布) │ │ │ └──────────┘ └──────────────┘ └──────────┘ │ │ │ │ 如有 L/T 形单元 → 先运行 MirrorPairStrategy │ │ 拼合形成 CompositeUnit 后再参与排版 │ └────────────────────┬────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────┐ │ FragmentFiller.fillFragments() │ │ 主排版后 → 计算剩余空间 → 凸分解 → 填充小尺寸单元 │ └─────────────────────────────────────────────────┘3.3 BottomLeftStrategy 核心算法这是最核心的放置策略采用贪心底左放置输入单元请求列表含多边形轮廓、数量、放置板、间距 1. 展开候选变体 每单元 × 4 旋转0°/90°/180°/270°× 2 镜像 → 去重对称项 2. 按面积降序排列大件优先 3. 轮询贪心放置多类型时轮流放置保证每种单元都有代表 a. 候选位置 有效区域原点 每个已放置单元 bbox 的 4 个角 间距偏移 b. 按 y 升序、x 升序排列底左优先 c. 对每个候选位置 - 板材边界检查原始多边形必须在板材内 - JTS 间距检查新多边形与每个已放置多边形的 distance ≥ spacing d. 第一个满足条件的位置即为放置位置 4. 碎片填充主排版后调用 FragmentFiller 填充边角余料// 间距检查的核心JTS distance 方法// 精度 0.001mm满足 PCB 制程要求booleanhasCollisionplacedOutlines.stream().anyMatch(placed-placed.distance(newOutline)spacing);3.4 MirrorPairStrategy镜像拼合L 形和 T 形器件单独排利用率极低~60%。但如果把它们两两镜像配对呢原始 L 形利用率 ~60%大量空隙 ┌─────┐ ┌─────┐┌─────┐ │ │ │ ││ │ │ L1 │ 镜像 → L1 ││ L1 │ ≈ 近矩形 │ │ │ ││ │ └──┘ │ └──┘ │└──┘ │ │ │ │ │ │ │ └──┘ └──┘ └──┘ 拼合后利用率~95%接近矩形算法实现// MirrorPairStrategy 核心逻辑for(Unitunit:lShapeUnits){for(Rotationrot:Rotation.values()){for(Edgeedge:Edge.values()){// 左/右/上/下Polygonmirroredunit.getOutline().mirror(edge).rotate(rot);Polygonunionunit.getOutline().union(mirrored);doublefillRateunion.getArea()/union.getBbox().getArea();if(fillRate0.7){// 拼合后填充率 ≥ 70%// 接受形成 CompositeUnit近矩形复合单元}}}}3.5 形状自动分类ShapeClassifier根据顶点数和凹角数自动分类形状判定规则顶点数策略RECTANGLE4 顶点 或 填充率 0.954标准矩形网格L_SHAPE6 顶点 1 凹角6MirrorPair BottomLeftT_SHAPE8-10 顶点 2 凹角8-10MirrorPair BottomLeftIRREGULAR其他十字形、弧形等不定Interleaved / Staggered3.6 碎片填充主排版完成后还有边角余料可以塞小尺寸单元。FragmentFiller的工作流程1. 计算剩余空间 板材 ⊖ 已放置单元 2. 使用 PolygonDecomposer 将剩余空间做凸分解 Delaunay 三角剖分 贪心合并为凸多边形 3. 网格扫描各凸碎片空间 4. 小单元 × 多旋转尝试 → 优先填入最小碎片四、AB 板拼版12 种策略当两种单板需要混拼在同一张 WPnl 上时系统提供 12 种策略按分割比例[0.25, 0.33, 0.5, 0.67, 0.75]遍历标准 AB 策略8 种序号策略说明1左右分左侧 A 区 右侧 B 区按比例分割2上下分上方 A 区 下方 B 区3交错行A/B 行交替排列4填空隙A 填满标准网格后B 填入剩余空隙5单行交替每行内 ABAB 水平交替6双行交替AABB 行块交替7单列交替每列内 ABAB 垂直交替8自定义间隔N 行 A M 行 B 循环花式 AB 混拼4 种序号策略说明9花式左右分左右分区 奇偶行偏移10花式上下分上下分区 奇偶行偏移11花式交错行交错行 奇偶行偏移12花式双行交替双行交替 奇偶行偏移每种策略下A 板和 B 板各自尝试 0°/90° 旋转4 种组合最终选总单元数最多的配置。五、智能板材推荐另一个实用功能是——不用人工去猜用什么规格的基材大板最划算。系统提供自动推荐// POST /api/v1/schemes/multi-panel/recommend-boards// 算法1.在虚拟无限大板5000×5000mm上紧凑排版得到 footprint2.对每块候选板材枚举(m×n)切割组合评分 scoreutilization ×0.7-normalizedCost ×0.33.生成推荐定制开料尺寸footprint边距向上取整到10mm返回结果包括各候选板材的利用率、推荐切割行列数、评分以及根据排版轮廓推算的定制开料建议尺寸。六、多格式文件解析系统支持三种行业标准格式的自动解析格式版本提取内容DXFR12 ~ 2018工件轮廓、外形坐标、有效加工区域GerberRS-274X / X2 / X3外形边框、工艺边、有效区域、属性信息ODB—Profile 轮廓、工艺层级、生产参数Gerber 解析时区分四种外形识别策略X2/X3 属性标记FileFunction,Profile文件名规则outline.gbr/.gko/.gm1线宽启发式 0.5mm 封闭轮廓优先用户手动指定图层解析时的异常检测非封闭轮廓首尾端点距离 0.01mm → 警告自交多边形 → 拒绝板尺寸 2mm → 警告多余碎线 0.1mm → 自动过滤七、技术架构总览┌──────────────────────────────────────────────┐ │ 前端 (Vue 3 Canvas 2D) │ │ Naive UI · Canvas 渲染 · 拖拽编辑 · 5px吸附 │ ├──────────────────────────────────────────────┤ │ 解析引擎 │ │ DXF/Gerber/ODB 文件解析服务 │ ├──────────────────────────────────────────────┤ │ 算法核心 (Spring Boot 3) │ │ 四层级计算 · 多边形引擎 · 多策略并行 · 板材推荐 │ ├──────────────────────────────────────────────┤ │ 数据层 │ │ PostgreSQL PostGIS (几何数据) │ │ Redis (缓存) · MinIO/OSS (文件存储) │ └──────────────────────────────────────────────┘核心技术栈Vue 3 Spring Boot 3 JTS Topology Suite PostgreSQL/PostGIS Redis Docker Kubernetes。Canvas 2D 可视化支持拖拽编辑、5px 边缘吸附、批量对齐操作。导出方面支持 PDF 方案报告OpenPDF和 DXF 生产图纸LWPOLYLINE 实体可直接对接制造设备。八、效果验证指标数值板材利用率提升10% ~ 20%相比人工参数系统101 可配置字段混合拼版最多支持 4 种单板文件格式DXF R12~2018 / Gerber RS-274X/X2/X3 / ODB碰撞检测精度0.001mmJTS对于一个中型 PCB 工厂来说月消耗基材金额通常在百万级别。利用率提升 10%意味着每月直接节省六位数的原材料成本。九、总结PCB 拼版系统的算法设计面临三个核心挑战层级嵌套Pcs → Set → WPnl → Sheet 四层级不是简单累加每一层的最优解不一定构成全局最优异形处理不用外接矩形、用真实多边形放置是利用率从差不多到逼近最优的关键策略多样性矩形阵列、花式拼、横直料、AB 板 12 策略、镜像拼合——没有万能算法但组合在一起能覆盖绝大多数场景核心代码围绕FourLevelCalculator四层级计算、BottomLeftStrategy多边形底左放置、MirrorPairStrategy镜像拼合、AbPanelOptimizerAB 板优化、FragmentFiller碎片填充五个模块职责清晰、可独立测试。产品详情https://qiancaosoft.com/products/pcb-optimization

相关新闻

PCB 拼版还在靠老法师?这套系统用算法帮你多省 20% 板材

PCB 拼版还在靠老法师?这套系统用算法帮你多省 20% 板材

PCB 拼版还在靠老法师?这套系统用算法帮你多省 20% 板材 摘要:PCB/FPC 制造行业,板材成本占比极高。传统人工拼版依赖工程师经验,利用率瓶颈难以突破,异形板混拼更是难题。本文介绍一套专为线路板行业打造的智能拼版系…

2026/10/14 0:17:15 阅读更多 →
怎么判断滚筒线是不是源头厂家?跑厂十余年,教你避开中间商套路

怎么判断滚筒线是不是源头厂家?跑厂十余年,教你避开中间商套路

做自动化设备这行十多年,跟着不少工厂老板外出考察滚筒线厂家。跟大家说句行业实在话,市面上鱼龙混杂,至少一半对外宣称源头工厂的商家,本质就是中间商。好多客户都踩过这个坑,签完合同之后才发现,设备层层…

2026/10/14 0:17:14 阅读更多 →
【PTrade】PTrade如何过滤ST、停牌和退市股票?完整教程

【PTrade】PTrade如何过滤ST、停牌和退市股票?完整教程

本方案由 EasyQuant AI量化助手 提供。如有更多问题,直接用 EasyQuant AI量化助手 帮您快速解决量化交易编程难题。 问题背景 量化选股后不能直接下单。ST 股票、停牌股票或退市整理标的可能导致无法正常交易,因此策略需要在交易前完成状态过滤。 PTr…

2026/10/8 14:27:32 阅读更多 →

最新新闻

如何让手机访问Symfony WebServerBundle本地服务器:0.0.0.0绑定与局域网暴露完整指南

如何让手机访问Symfony WebServerBundle本地服务器:0.0.0.0绑定与局域网暴露完整指南

【免费下载链接】web-server-bundle Provides commands for running applications using the PHP built-in web server 项目地址: https://gitcode.com/gh_mirrors/we/web-server-bundle 点击查看 免费下载 想让手机直接打开你电脑上跑的 Symfony 应用吗&#xff1…

2026/10/14 0:16:46 阅读更多 →
极大极小值算法与Alpha-Beta剪枝:棋类博弈搜索核心解析

极大极小值算法与Alpha-Beta剪枝:棋类博弈搜索核心解析

写一个会下棋的 AI 难吗?如果只靠暴力枚举,哪怕是一盘井字棋,顶多 9! 种走法还能忍,换到五子棋、国际象棋,分支因子一下子爆炸,普通程序根本算不完。这时候就得回到博弈树搜索的老套路:极大极小…

2026/10/14 0:16:46 阅读更多 →
Chan-Vese 图像分割算法 Python 实现与参数调优实战

Chan-Vese 图像分割算法 Python 实现与参数调优实战

简介:这份资源提供Chan-Vese图像分割算法的Python实现代码,面向正在学习图像处理、计算机视觉或活动轮廓模型的学生与开发者。Chan-Vese模型是首个完全脱离图像梯度信息、依靠区域信息构建能量函数的活动轮廓模型,为后续分割方法开辟了新方向…

2026/10/14 0:16:46 阅读更多 →
Neo4j 5.23 Windows 配置避坑指南:从安装到生产就绪

Neo4j 5.23 Windows 配置避坑指南:从安装到生产就绪

简介:Neo4j Community Edition 5.23.0 Windows版安装包,面向图形数据库初学者、高校学生及中小型项目开发者,提供开箱即用的本地图数据库环境,适用于社交关系分析、推荐系统原型开发、知识图谱构建等高度关联性数据场景。压缩包共…

2026/10/14 0:16:46 阅读更多 →
noto-fonts NEWS 解读:Noto 字体三次关键演进、upem 网格限制与 OFL 1.1 授权切换

noto-fonts NEWS 解读:Noto 字体三次关键演进、upem 网格限制与 OFL 1.1 授权切换

数据集 【免费下载链接】noto-fonts Noto fonts, except for CJK and emoji 项目地址: https://gitcode.com/gh_mirrors/no/noto-fonts 点击查看 免费下载 本文基于 noto-fonts 仓库根目录下的 NEWS.md 编写,梳理 2015—2018 年间 Noto 字体项目的三次里…

2026/10/14 0:16:46 阅读更多 →
glibc内存管理核心:malloc/free原理、RSS异常排查与调优实践

glibc内存管理核心:malloc/free原理、RSS异常排查与调优实践

搞了十多年Linux服务端,我遇到过不少内存方面的疑难杂症:程序跑着跑着RSS飙到十几个GB,看代码却找不到任何泄漏;压力测试一过进程就被OOM干掉;线上明明有内存空闲,服务却越跑越慢。这些问题表面上是业务逻辑…

2026/10/14 0:15:46 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →