FuckJLC icon indicating copy to clipboard operation
FuckJLC copied to clipboard

AD20 按照 rules 里面说明导出的gerber,经过脚本处理后出现问题

Open MDLZCOOL opened this issue 4 months ago • 13 comments

具体问题为:

  • 上传嘉立创依然识别出来不是 lceda 设计
  • 没有钻孔层了,cam软件看打的 via 全部消失

感谢大佬的脚本,期待回复,不知道是我哪里操作有问题

MDLZCOOL avatar Aug 17 '25 07:08 MDLZCOOL

请补充原 Gerber 文件目录结构、脚本修改后文件目录结构、脚本配置

acha666 avatar Aug 17 '25 09:08 acha666

原 Gerber 结构:

Image

脚本导出的 Gerber 结构:

Image

脚本配置:


python modify.py -i path/to/gerber_raw -o path/to/out -r rules/rule-altium.yml

脚本日志:


共发现 27 个文件。
排除文件: C:\Users\Public\Documents\Altium\IU_Meter\gerber_raw\Fabrication Testpoint Report for PCB1.REP (类型 REP)
排除文件: C:\Users\Public\Documents\Altium\IU_Meter\gerber_raw\PCB1-macro.APR_LIB (类型 APR_LIB)
排除文件: C:\Users\Public\Documents\Altium\IU_Meter\gerber_raw\PCB1.apr (类型 Aperture)
排除文件: C:\Users\Public\Documents\Altium\IU_Meter\gerber_raw\PCB1.DRR (类型 DrillReport)
排除文件: C:\Users\Public\Documents\Altium\IU_Meter\gerber_raw\PCB1.EXTREP (类型 EXTREP)
排除文件: C:\Users\Public\Documents\Altium\IU_Meter\gerber_raw\PCB1.LDP (类型 LDP)
排除文件: C:\Users\Public\Documents\Altium\IU_Meter\gerber_raw\PCB1.REP (类型 REP)
已处理 'C:\Users\Public\Documents\Altium\IU_Meter\gerber_raw\PCB1_Copper_Signal_Bot.gbr' -> 'C:\Users\Public\Documents\Altium\IU_Meter\out\Gerber_BottomLayer.GBL' (类型 BottomLayer, action: add_header)
已处理 'C:\Users\Public\Documents\Altium\IU_Meter\gerber_raw\PCB1_Copper_Signal_Top.gbr' -> 'C:\Users\Public\Documents\Altium\IU_Meter\out\Gerber_TopLayer.GTL' (类型 TopLayer, action: add_header)
已处理 'C:\Users\Public\Documents\Altium\IU_Meter\gerber_raw\PCB1_Legend_Bot.gbr' -> 'C:\Users\Public\Documents\Altium\IU_Meter\out\Gerber_BottomSilk.GBO' (类型 BottomSilk, action: add_header)
已处理 'C:\Users\Public\Documents\Altium\IU_Meter\gerber_raw\PCB1_Legend_Top.gbr' -> 'C:\Users\Public\Documents\Altium\IU_Meter\out\Gerber_TopSilk.GTO' (类型 TopSilk, action: add_header)
排除文件: C:\Users\Public\Documents\Altium\IU_Meter\gerber_raw\PCB1_Pads_Bot.gbr (类型 BottomPads)
排除文件: C:\Users\Public\Documents\Altium\IU_Meter\gerber_raw\PCB1_Pads_Top.gbr (类型 TopPads)
已处理 'C:\Users\Public\Documents\Altium\IU_Meter\gerber_raw\PCB1_Paste_Bot.gbr' -> 'C:\Users\Public\Documents\Altium\IU_Meter\out\Gerber_BottomPaste.GBP' (类型 BottomPaste, action: add_header)
已处理 'C:\Users\Public\Documents\Altium\IU_Meter\gerber_raw\PCB1_Paste_Top.gbr' -> 'C:\Users\Public\Documents\Altium\IU_Meter\out\Gerber_TopPaste.GTP' (类型 TopPaste, action: add_header)
已处理 'C:\Users\Public\Documents\Altium\IU_Meter\gerber_raw\PCB1_Profile.gbr' -> 'C:\Users\Public\Documents\Altium\IU_Meter\out\Gerber_Outline.GKO' (类型 Outline, action: add_header)
已处理 'C:\Users\Public\Documents\Altium\IU_Meter\gerber_raw\PCB1_Soldermask_Bot.gbr' -> 'C:\Users\Public\Documents\Altium\IU_Meter\out\Gerber_BottomSolderMask.GBS' (类型 BottomSolderMask, action: adder)
已处理 'C:\Users\Public\Documents\Altium\IU_Meter\gerber_raw\PCB1_Soldermask_Top.gbr' -> 'C:\Users\Public\Documents\Altium\IU_Meter\out\Gerber_TopSolderMask.GTS' (类型 TopSolderMask, action: add_header)
未处理文件类型 'RoundPlatedDrill'。
未处理文件类型 'SlotPlatedDrill'。
未处理文件类型 'RoundNonPlatedDrill'。
未处理文件类型 'SlotNonPlatedDrill'。
已生成文档文件: 'C:\Users\Public\Documents\Altium\IU_Meter\out\PCB下单必读.txt'

MDLZCOOL avatar Aug 17 '25 09:08 MDLZCOOL

缺失钻孔文件

Altium Designer 对于不含槽孔的 PCB 文件仅生成 {PCB_NAME}-{Plated,NonPlated}.TXT 两个钻孔文件。

对于含槽孔的PCB文件可出现 {PCB_NAME}-{SlotHoles,RoundHoles}-{Plated,NonPlated}.TXT 最多四个 Excellon 钻孔。

脚本当前未做特殊处理,导致可能无法自动识别 Altium Designer 产生的所有钻孔文件,因此需要修改规则以手动匹配用户工程的钻孔文件个数以及文件名情况,请见配置文件:

https://github.com/acha666/FuckJLC/blob/5322d7f5053c5d92c19a9f62ae88ea1dd80c2267/rules/rule-altium.yml#L83-L116

请在上传工程前务必再次确认原工程钻孔是否一一对应到输出,同时注意日志 未处理文件类型 警告。

绕过检测失败

问题待分析,请先自行对照并尝试合并最新版嘉立创 EDA 导出 Gerber 结构和文件头与脚本输出的差异

acha666 avatar Aug 17 '25 10:08 acha666

感谢回复,现在已经解决钻孔问题,在尝试怎么绕过检测,目前试了下面这段(在 kicad 上屡试不爽),也是不行,不知道是不是针对 Altium Designer 搞了什么骚操作


G04 EasyEDA v6.4.20.6, 2021-08-10T22:17:48+08:00*
G04 3e40aa7c103941ed943dfb521ea35c29,b8edaa0a806e4915acc4ca6663e46532,10*
G04 Gerber Generator version 0.2*
G04 Scale: 100 percent, Rotated: No, Reflected: No *
G04 Dimensions in millimeters *
G04 leading zeros omitted , absolute positions ,4 integer and 5 decimal *

MDLZCOOL avatar Aug 17 '25 10:08 MDLZCOOL

经确认,目前至少增加了对嘉立创 EDA 特有 Gerber 命令注释特征的检测,例如嘉立创 EDA 专业版导出的简单 Gerber:

G04 Layer: BottomSolderMaskLayer*
G04 EasyEDA Pro v2.2.40.8, 2025-08-17 03:57:55*
G04 Gerber Generator version 0.3*
G04 Scale: 100 percent, Rotated: No, Reflected: No*
G04 Dimensions in millimeters*
G04 Leading zeros omitted, absolute positions, 4 integers and 5 decimals*
G04 Generated by custom config*
%FSLAX45Y45*%
%MOMM*%
%ADD10C,0.254*%
%ADD11C,0.6863*%
G75*


G04 Rect Start*
G36*
G01X-1536700Y2362200D02*
G01X-1536700Y3530600D01*
G01X215900Y3530600D01*
G01X215900Y2362200D01*
G01X-1536700Y2362200D01*
G37*
G04 Rect End*
G54D10*

M02*

为每个文件删除 G04 Rect Start* 行即导致用券失败

附测试用 Gerber 文件: Gerber_Acceptable.zip Gerber_Unacceptable.zip

由于分析专业版 Gerber 特征并直接逆向其他 EDA 软件导出的 Gerber 进行修改较为困难,此次嘉立创侧更新可能难以反制。

目前试了下面这段(在 kicad 上屡试不爽)

麻烦您提供有关”脚本在 Kicad 工程下仍可用“更详细的描述,若目前您在使用标准版的 G04 头修改 KiCad 工程后可正常绕过检测,我们或有望转而参考标准版 Gerber 特征实现绕过。

acha666 avatar Aug 17 '25 11:08 acha666

发现前几天还可以用的方法(即上面提到的”屡试不爽“的方法)也失效了,重新上传之前可以通过检测的 Gerber 文件,现在也会报非 lceda 设计,应该是策略又更新了

MDLZCOOL avatar Aug 17 '25 11:08 MDLZCOOL

好像最近确实加强了检测 f**k之后依旧不能用卷

kumonohayaku avatar Aug 21 '25 09:08 kumonohayaku

立创最新版本已绕过

Image

https://github.com/canmi21/openjlc/releases

canmi21 avatar Sep 16 '25 18:09 canmi21

立创最新版本已绕过

Image https://github.com/canmi21/openjlc/releases

大佬tql

kumonohayaku avatar Sep 16 '25 18:09 kumonohayaku

立创最新版本已绕过

Image https://github.com/canmi21/openjlc/releases

大佬牛逼

MDLZCOOL avatar Sep 17 '25 02:09 MDLZCOOL

立创最新版本已绕过 Image

https://github.com/canmi21/openjlc/releases

虽然但是,最新的绕过方式是我的仓库 https://github.com/HalfSweet/TransJLC.git 中首先提出的吧。你仓库的README里面没有说明并且也没有在你的issue里面更新任何来源是不是就有点难绷了。虽然算法就一百多行但是逆向还是花了不少时间的,kicad的测试也花了好几个小时,至少得提一下吧。更何况在别人的issue下宣传自己的仓库是否也有点难评。

HalfSweet avatar Sep 17 '25 05:09 HalfSweet

顺带一提,TransJLC的设计也远早于OpenJLC。因为早期只是一个粗糙的实现所以也没有加README和License。现在虽然License的commit在主要代码之后,但是代码依然受到Apache-2.0协议保护。 如果有人对原始的逆向过程有任何兴趣的话都可以直接联系我,破坏和抄袭不是目的,开源的唯一目的只有大家共同学习和进步。另外如果大家对于两个仓库的前后顺序发展有疑问的话,也可以联系我以提供更多的证明。

HalfSweet avatar Sep 17 '25 05:09 HalfSweet

Fix: https://github.com/nextjlc/openjlc/issues/5#issuecomment-3310381698 目前转为共同维护后端 https://github.com/nextjlc/core

canmi21 avatar Sep 22 '25 15:09 canmi21