简介genesis97.rar 是一份面向 PCB 线路板设计与制造从业者的 Genesis 工具安装包适配 Windows 10 64 位系统针对安装中途失败、装后出现内部错误等常见问题做了简化处理适合需要搭建电路图绘制、元件布局与布线环境的工程师及自学者。压缩包共 952 个文件约 183.66MB以 463 个 pcz、107 个 tcl 脚本、94 个 exe 程序、45 个 xkb 键映射文件及 16 个 dll 动态库为主另含 txt 说明、gif/bmp 图形资源和 ini、bat 等配置文件覆盖主程序、辅助脚本与运行依赖。已有 375 人学习下载。包内附下载说明、readme、解压密码等文档便于按提示完成解压与安装tcl 脚本与 pcz 数据可用于理解工艺参数、脚本扩展和工程配置配合示例资源可辅助排查环境问题、熟悉目录组织对初装用户和需要查阅脚本样例的工程师均有参考价值。1. 从一堆散装 Gerber 到能下厂的拼板genesis97.rar 要解决的那件事PCB 线路板处理工具这类资源真正稀缺的从来不是界面而是那套能把散装 Gerber、Excellon 钻孔、IPC-356 网络表收进同一个工程里做层对齐、拼板、加工艺边再输出的流程。genesis97.rar就是一套 win10 可安装的老牌 CAM 侧工程工具主打的是把来自不同 EDA、不同年代的文件归一化到同一个 job 里再按工厂的工艺规则产出。它适合谁适合手上常年堆着历史资料、需要批量拼板出图、又不想为一次性小批量订单单独买现代 CAM 授权的人也适合想搞明白“CAM 到底在做什么”的硬件工程师。它不适合只想点两下就出片的纯新手前置配置的麻烦程度比现代工具高一个量级预算里得留出折腾时间。2. Win10 上把它跑起来三个前置条件与一套目录约定把一份九十年代末期的 Windows 程序装进 Win10翻车点基本不在解压而在代际、路径和授权这三件事上。这三件事没解决你会看到各种“能启动但用不了”的玄学现象界面出来了一 open job 就闪退文件能导导完坐标全偏脚本跑一半断掉留下个半成品工程。下面按动手顺序拆。2.1 先判断它属于哪一代 Windows 程序这一代工具横跨了 16 位和 32 位两个时期两者的处理方式完全不同16 位程序在 64 位 Win10 上根本起不来报的是“此应用无法在你的电脑上运行”这不是兼容模式能救的只能上 32 位虚拟机32 位程序则可以在 64 位 Win10 上跑但需要兼容模式、管理员权限和正确的区域设置配合。判断办法不用装第三方工具直接读 PE 头里的 Machine 字段就够了。把下面的脚本存成check_pe.ps1用 PowerShell 执行。# check_pe.ps1 - 读取可执行文件的 PE 机器类型判断 16/32/64 位 param([string]$Path C:\GEN97\bin\genesis.exe) $fs [System.IO.File]::OpenRead($Path) $br New-Object System.IO.BinaryReader($fs) # PE 头偏移量存在 0x3C 处的 4 字节里 $fs.Position 0x3C $peOffset $br.ReadInt32() # PE 签名占 4 字节紧随其后 2 字节就是 Machine $fs.Position $peOffset 4 $machine $br.ReadUInt16() $br.Close(); $fs.Close() switch ($machine) { 0x014c { i386 / 32 位能够在 64 位 Win10 上运行 } 0x8664 { x64 / 64 位 } 0x01c0 { ARM } 0x0000 { 极可能是 16 位 NE 格式只能上 32 位虚拟机 } default { Machine 0x{0:X4}需查表确认 -f $machine } }脚本的关键在两处偏移0x3C存放的是 PE 头相对文件头的偏移读到之后跳过 4 字节的PE\0\0签名接下来的 2 字节就是目标架构。0x014c是 i386代表 32 位0x8664是 x64。如果读到0x0000或者脚本直接抛异常基本可以判定是更老的 NE 格式那就别在物理机上浪费时间了。确认是 32 位之后右键可执行文件 → 属性 → 兼容性勾选“以兼容模式运行这个程序”选 Windows XP (Service Pack 3)同时勾上“以管理员身份运行此程序”。这一步不做的话程序往往在写临时文件的时候默默失败界面不报错但打开工程就是空白。2.2 安装路径、权限与区域设置的具体改法路径这件事必须一次性做对后面所有脚本、临时目录、工程路径都依赖它。三条硬规矩全英文、不含空格、长度控制在 8 个字符以内。不放进Program Files的原因很实在UAC 会把这套老程序的写入操作重定向到虚拟存储导致你在 A 目录改了配置程序实际读的是 B 目录另外程序内部对空格路径的拼接处理并不可靠C:\Program Files\PCB Tools\这种路径在批处理里极易被拆成两个参数。我一般用C:\GEN97并且提前把目录骨架建好。echo off REM init_env.bat - 建立短路径工作目录并放开权限 set ROOTC:\GEN97 mkdir %ROOT% mkdir %ROOT%\bin mkdir %ROOT%\jobs mkdir %ROOT%\tmp mkdir %ROOT%\scripts mkdir %ROOT%\log REM 给当前用户完全控制避免 UAC 虚拟化把写入重定向走 icacls %ROOT% /grant %USERNAME%:(OI)(CI)F /T REM 清理可能残留的只读属性从压缩包解出来容易带 attrib -R %ROOT%\*.* /S /D echo [OK] 目录骨架已建立: %ROOT% pauseicacls那行的(OI)(CI)F表示对目录下的对象和容器都继承完全控制权限/T递归应用到已有子项。attrib -R是我吃过亏才加上的从某些压缩包里解出来文件会带只读位程序读得到、写不进去表现为“保存配置后重启又变回默认值”。区域设置上有个取舍要提前想清楚。程序的非 Unicode 语言设置建议保持“英语(美国)”这样内部字符串不会因为代码页转换出问题代价是工程名、备注里写中文会变乱码。我的做法是工程名、层名、脚本变量名全部用英文和数字中文只写在单独的说明文档里不进工程。注意区域设置改完必须重启只在控制面板里点确定不生效很多人卡在这一步。另外把系统的小数点符号确认成.如果区域格式里被设成了逗号Gerber 里的坐标解析会成片出错而且报错信息不会告诉你原因。2.3 授权、临时目录与启动参数的落地配置临时目录是这套程序最容易被忽略的一环。它默认会往系统 TEMP 里写大量中间文件而系统 TEMP 的路径通常是C:\Users\某某某\AppData\Local\Temp既长又可能含中文用户名。解决办法是在启动器里把TMP和TEMP都覆盖掉。echo off REM start_genesis.bat - 统一的启动入口所有环境变量在这里收口 set GENESIS_DIRC:\GEN97 set GENESIS_TMPC:\GEN97\tmp set TMP%GENESIS_TMP% set TEMP%GENESIS_TMP% set GENESIS_LOGC:\GEN97\log REM 授权文件路径具体文件名以你那套资源里实际带的对上 set GENESIS_LICENSE%GENESIS_DIR%\license\license.dat cd /d %GENESIS_DIR%\bin start genesis.exe %*几个参数值得说明。GENESIS_TMP指向短路径一是避免长路径拼接失败二是方便出问题时直接把整个 tmp 目录清空重来不用在系统临时目录里翻。GENESIS_LICENSE指向授权文件路径必须写绝对路径不要用%CD%之类的相对写法——程序在切换工作目录之后会找不到它。%*把命令行参数原样透传后面调脚本的时候会用到。启动器建好之后在桌面建个快捷方式指向它不要直接指向genesis.exe否则每次都要重新配环境变量。提示把所有环境变量集中在启动器的 bat 里是这类老程序最省心的做法。散落在系统环境变量里换机器的时候你会漏掉一两个然后花半天排查“为什么这台机器行为不一样”。3. Gerber 与 Excellon 导入层映射、单位与 D 码对齐的三道关文件导入是整套流程里返工率最高的环节。老资料的问题不在于格式不认识而在于“认错了但不报错”——程序按自己的猜测解析出来的图形看着像那么回事尺寸却差了一个数量级或者底层和顶层镜像反了。这一章按“先摸清文件 → 再建映射表 → 最后校验”的顺序走。3.1 用脚本先扫一遍文件头把格式和单位摸清Gerber 分两大流派老式的 RS-274D 只有图形指令D 码定义在单独的文件里新式的 RS-274X 把 D 码内嵌进文件靠%AD指令声明。这两种的导入参数完全不一样混着导必翻车。Excellon 钻孔文件则是另一套语法以M48开头。花两分钟写个扫描脚本比在软件里一个一个试要快得多。# sniff_cam.py - 扫描目录下所有 CAM 文件识别格式、单位、精度和 D 码数量 import re import sys from pathlib import Path FS_RE re.compile(r%FS([LT])([AI])X(\d)(\d)Y(\d)(\d)\*%) MO_RE re.compile(r%MO(IN|MM)\*%) AD_RE re.compile(r%ADD(\d)([A-Za-z_0-9])) DCODE_RE re.compile(r^D(\d)\*, re.MULTILINE) EXC_TOOL re.compile(r^T(\d)C([\d.]), re.MULTILINE) def sniff(path: Path) - dict: # 只读前 64KB够用了大文件全读会拖慢批量扫描 head path.read_text(errorsignore, encodinglatin-1)[:65536] info {file: path.name, kind: 未知, unit: -, fmt: -, zero: -, dcodes: 0} if head.lstrip().startswith(M48) or M48 in head[:200]: info[kind] Excellon tools EXC_TOOL.findall(head) info[dcodes] len(set(t[0] for t in tools)) m re.search(r(METRIC|INCH)\s*,\s*(TZ|LZ), head) if m: info[unit] mm if m.group(1) METRIC else inch info[zero] 后导零省略 if m.group(2) TZ else 前导零省略 return info if %FS in head or %MO in head: info[kind] RS-274X m MO_RE.search(head) if m: info[unit] inch if m.group(1) IN else mm f FS_RE.search(head) if f: info[zero] 前导零省略 if f.group(1) L else 后导零省略 info[fmt] f{f.group(3)}:{f.group(4)} info[dcodes] len(set(AD_RE.findall(head))) return info # 没有 FS/MO基本就是老式 RS-274DD 码在外部文件里 info[kind] RS-274D dcs [int(d) for d in DCODE_RE.findall(head)] info[dcodes] len(set(d for d in dcs if d 10)) return info if __name__ __main__: root Path(sys.argv[1] if len(sys.argv) 1 else .) rows [sniff(p) for p in sorted(root.rglob(*)) if p.is_file() and p.suffix.lower() in (.gbr, .ger, .art, .pho, .drl, .txt, .nc)] print(f{文件:28}{类型:12}{单位:8}{精度:8}{零省略:14}{D码/T码}) for r in rows: print(f{r[file]:28}{r[kind]:12}{r[unit]:8} f{r[fmt]:8}{r[zero]:14}{r[dcodes]})脚本的核心是三个正则。FS_RE匹配%FSLAX24Y24*%这种格式声明其中第一个字母L/T是零省略方式第二个字母A/I是绝对/增量坐标后面的24分别是整数位和小数位——这两个数字直接决定导入时的精度该填多少。MO_RE匹配单位声明。AD_RE统计内嵌的 D 码定义条数导完之后拿这个数跟软件里显示的 aperture 数量对一下对不上就说明有定义没被识别。跑完你会得到一张表最需要盯的是两列unit是-的说明文件里压根没声明单位得靠猜或者靠测量基准孔反推kind是RS-274D的必须额外找到配套的 D 码文件否则导进去只有图形没有实际线宽。3.2 层映射表怎么建命名规则怎么定层映射表是这套流程的地基。建表之前先把命名规则定死别一边导一边改名字改到后面自己都不记得哪层是哪层。我用的规则是信号层L1…Ln从顶层往下数TOP/BOT作为别名只在双面板里用阻焊SM_TOP/SM_BOT丝印SS_TOP/SS_BOT钢网SP_TOP/SP_BOT成型OUTLINE钻孔DRILL铣槽ROUT文档DOC。层属性里的类型字段也要跟着设这决定了后面 DRC 按什么规则去检查它。文件名常见模式映射层名层类型极性备注*.gtl/*top*.gbrL1signal正片元件面*.gbl/*bot*.gbrL2signal正片需做镜像*.gts/*smt*.gbrSM_TOPsolder_mask负片开窗区为图形*.gbsSM_BOTsolder_mask负片同上*.gto/*silk*SS_TOPsilk_screen正片注意线宽下限*.gko/*outline*OUTLINEdocument正片必须是闭合轮廓*.drl/*.ncDRILLdrill正片Excellon 格式*.ipc/*356*NETdocument正片用于网络比对“极性”这一列是最容易埋雷的地方。阻焊层在 Gerber 里通常是负片语义——画图形的地方是要开窗的没画的地方是盖油的。如果软件把负片按正片解释你会看到整块板被阻焊盖死。导入的时候必须在层属性里显式指定 polarity不能指望程序自动判断。底层镜像同理。L2导进来之后要不要做 mirror取决于源文件是不是已经在 EDA 侧镜像过了。判断办法很土但有效找一个只在底层存在的丝印字符导进来之后看它在视图里是正读还是反读反读就说明需要再镜像一次。3.3 单位、精度与 D 码表的对齐与校验单位和精度错了最典型的症状是“图形整体缩小 25.4 倍”或者“坐标偏出去几千毫米”。这两个数字必须跟扫描脚本读出来的完全一致不能靠试。精度填法%FSLAX24Y24*%就填2:4整数 2 位、小数 4 位。老资料里2:3很常见那时候线宽精度要求没现在高。填错一位整板尺寸偏差就是十倍或十分之一肉眼不一定立刻看出来等出片才发现就晚了。校验的办法是找一个已知尺寸做基准。板上如果有安装孔阵列孔距通常是 2.54mm 的整数倍导进来之后量一下或者直接用板框的长宽跟图纸对。这一步花三十秒能省掉后面几个小时的返工。D 码表要对齐的是“源文件里定义的线宽/焊盘尺寸”和“软件里识别出来的 aperture 列表”。做法是把扫描脚本统计的 D 码数量跟软件 aperture 列表的条数比数量一致还不够还要抽两三条比对实际尺寸源文件里%ADD10C,0.200000*%是直径 0.2mm 的圆软件里对应条目的尺寸也得是 0.2单位一致。注意老式 RS-274D 的 D 码表如果是单独文件导入顺序不能反——必须先载入 D 码表再载入图形文件否则图形会全部落到默认线宽上。4. 拼板与工艺边把重复排版压成一次脚本调用单板处理完接下来是拼板。这一步在整个流程里重复度最高也最适合脚本化。手拼一块 4×3 的板子大概二十分钟写脚本第一次要两小时之后每块板两分钟做够十块板就回本了。4.1 拼板参数先定死间距、工艺边、Mark 与 V-CUT拼板不是把单元排开就完事参数得提前跟板厂对一遍否则出图之后被退回来重做。下面这张表是我常用的默认值实际以板厂工艺能力为准。参数常用取值说明单元间距1.6 ~ 2.0 mm铣边拼板用V-CUT 需 ≥ 5 mm工艺边宽度5 mm传送边长边两侧各一条Mark 点直径1.0 mm阻焊开窗 2.0 mmMark 点净空周围 3 mm 无铜、无阻焊否则识别率骤降V-CUT 残厚板厚的 1/3太薄易断太厚掰不开邮票孔孔径0.5 mm孔距 0.8 mm一组 5 个拼板利用率≥ 75%低于这个值先考虑改排版方向Mark 点是最容易被忽略的一项。它的位置应该在工艺边的对角且最好是整板不对称布局——不对称才能在贴片机里区分正反面。净空区如果被走线穿了光学识别会时好时坏表现为“同一批板子有的能识别有的不能”非常难查。V-CUT 的残厚控制同样值得说一句。设成板厚 1/3 是经验值1.6mm 板对应约 0.5mm。设厚了分板时会把板边撕裂设薄了运输途中自己就断了。板厂一般会按你的标注做但标注得写清楚是“残厚”还是“切深”这两个概念差一个板厚。4.2 用 Genesis 脚本把拼板动作串起来这套工具自带脚本环境语法接近 csh通过COM前缀调用内部命令。不同版本之间命令名会有出入所以稳妥的做法是先用help查本机实际支持的写法再往脚本里写。# panel_build.csh - 拼板主流程骨架 # 调用方式在脚本编辑器里 source 本文件或 genesis -c source panel_build.csh set JOB $1 # 工程名 set ROWS $2 # 行数 set COLS $3 # 列数 set DX 2.0 # 列间距 mm set DY 2.0 # 行间距 mm set EDGE 5.0 # 工艺边宽度 mm COM open_job, job$JOB COM units, typemm # 建立拼板 step单元从 unit step 阵列复制过来 COM create_step, steppanel COM step_repeat, stepunit, targetpanel, \ rows$ROWS, cols$COLS, dx$DX, dy$DY # 工艺边在 panel step 里按外扩板框画出四条边 COM add_rectangle, steppanel, layerOUTLINE, \ x1-$EDGE, y1-$EDGE, x2$COLS*$DX$EDGE, y2$ROWS*$DY$EDGE # 光学点工艺边对角各放一个注意别和定位孔打架 COM add_circle, steppanel, layerSM_TOP, \ x0.0, y0.0, diameter2.0 COM add_circle, steppanel, layerL1, \ x0.0, y0.0, diameter1.0 COM save_job, job$JOB echo 拼板完成: $ROWS x $COLS, 间距 ${DX}x${DY} mm这段骨架的每一行对应一个动作open_job打开工程units把工作单位切到毫米不设的话后面所有坐标按当前默认单位解释很容易差 25.4 倍create_step建一个独立的拼板 stepstep_repeat做阵列复制add_rectangle和add_circle画工艺边和光学点。参数里最需要按项目改的是ROWS/COLS和DX/DY。DX/DY设成 2.0 是留给铣边和 V-CUT 的余量如果这块板用 V-CUT 分板这个值要放大到 5.0 以上否则刀走过去会切到相邻单元的器件。EDGE设 5.0 是传送边的最小宽度板子特别小的时候可以缩到 3.0但要跟贴片厂确认。命令名对不上的时候别急着改脚本逻辑先确认是不是版本差异。在命令行里敲help step_repeat之类的会列出本机支持的参数名。我见过有人因为命令名差一个下划线调试了整整一个下午。4.3 输出前的叠层与层次检查拼板做完导出之前还有一轮检查重点是层次关系和叠层顺序。检查项不多但漏一项就可能整批报废。叠层顺序指的是信号层、阻焊、丝印之间的相对关系。视图里从上到下应该能看到丝印在阻焊之上阻焊在线路之上。顺序反了你在图形界面里看着没问题出成 Gerber 之后贴片厂那边的比对工具会报“丝印被阻焊覆盖”。工艺边和单元之间的边界也要确认。工艺边是独立区域不应该有任何信号走线跨过去跨了的话分板时会把走线切断而且这种错在 CAM 视图里不明显因为线和板框重叠在一起。最后一件事是把拼板 step 里的所有层逐个开关一遍确认没有空层。空层导出之后会生成一个只有文件头的 Gerber某些老旧的板厂前端系统会直接拒收。5. 避坑与排查五条从现场捡回来的记录这一章全部来自实际踩过的坑。每条按“现象 → 原因 → 解决”写症状描述尽量具体方便你对号入座。5.1 界面能起一 open job 就闪退现象程序启动正常菜单能点一旦打开工程窗口闪一下就没了日志里只有一行无关紧要的初始化信息。原因临时目录不可写。程序在 open job 的时候会把工程解压到TMP指向的目录做预处理如果那个目录没有写权限或者被安全软件拦了进程会直接退出且不弹错误框。解决把TMP和TEMP都指向C:\GEN97\tmp确认当前用户对该目录有完全控制权限然后把这个目录加进安全软件的排除列表。验证办法很简单——手动在那个目录里新建一个文本文件能建成就说明权限没问题。5.2 Gerber 导进去整体尺寸差 25.4 倍现象图形轮廓是对的但量出来整板尺寸正好是 1 英寸对应 1 毫米或者反过来比例恰好 25.4。原因文件里没写%MO单位声明程序按默认的英寸解析而实际数据是毫米或者反过来导入时手动选了单位但选错。解决先用第 3 章的扫描脚本确认unit列。如果是-说明文件确实没声明这时不要猜用板上已知间距安装孔 2.54mm 阵列最可靠反推量出来是 0.1 就说明被当成英寸了把导入单位改成毫米重导。改完之后一定要重新量一次别只看比例对不对。5.3 阻焊层和线路层完全对不上现象线路层正常阻焊层导进来之后是一整片实心把整板盖死了。原因阻焊层的极性搞反了。Gerber 里阻焊层是负片语义画了图形的地方是要开窗的程序如果按正片解释就会把没画的区域当成要覆盖的图形。解决在层属性里把 polarity 显式设成 negative。设完之后视图里应该能看到焊盘位置是“镂空”的。如果设完还是不对检查源文件本身是不是已经被 EDA 侧转换成正片导出过——这两种情况在文件头里不一定有标记只能靠视觉效果判断。5.4 钻孔和焊盘不同心偏移量随坐标增大现象板子中心的孔基本对得上越往边缘偏得越多最大偏差能有零点几毫米。原因Excellon 头里的零省略方式TZ/LZ跟软件设定不一致。前导零省略和后导零省略在数值高位上的解释差了若干个数量级表现为线性增长的偏移。解决确认钻孔文件头部的METRIC,TZ或INCH,LZ声明在导入参数里选择完全一致的选项。如果文件头里压根没有这行声明就按坐标的位数判断坐标字符串长度固定且高位补零的通常是前导零保留长度不定且末尾补零的是后导零保留。判断完重导一次用板中心的孔位和角落的孔位各量一次做交叉验证。5.5 脚本跑到一半中断留下半成品工程现象拼板脚本执行到某一步报错退出工程目录里留下一个只拼了一半的 job直接在上面继续跑会出现重复图形。原因老版本的脚本环境没有事务概念每条COM命令执行完立即落盘中途失败就是脏数据。解决在脚本开头加一段前置检查确认目标 step 不存在再继续另外把整个工程目录在跑脚本之前复制一份做快照失败就从快照恢复别试图在脏数据上修补。我现在固定用jobs\_snapshot\存快照命名带上时间戳恢复的时候直接覆盖回去。6. 出片前的那张自检表一个批量校验脚本和三条硬规矩导出之前的最后一道关我固定跑一个批量校验脚本把“肉眼看不出来但板厂一定会退”的问题挡在前面。脚本干三件事统计每层的 D 码数量、检查单位声明是否齐全、比对钻孔数和网络表里的引脚数。# final_check.py - 出片前校验单位齐全性 D 码统计 钻孔与网络表数量比对 import re, sys from pathlib import Path def layer_stat(p: Path): txt p.read_text(errorsignore, encodinglatin-1) has_unit bool(re.search(r%MO(IN|MM)\*%, txt)) has_fmt bool(re.search(r%FS[LT][AI]X\d\dY\d\d\*%, txt)) dcodes len(set(re.findall(r%ADD(\d), txt))) # 负片层通常伴随 LPC清空指令出现次数明显偏多 negative txt.count(%LPC*%) txt.count(%LPD*%) return has_unit, has_fmt, dcodes, negative def drill_count(p: Path) - int: txt p.read_text(errorsignore, encodinglatin-1) # 统计坐标行数量忽略工具定义行和头部 hits re.findall(r^X[-]?\d.*?Y[-]?\d, txt, re.MULTILINE) return len(hits) root Path(sys.argv[1]) bad [] for f in sorted(root.glob(*.g*)): u, fm, dc, neg layer_stat(f) flag if (u and fm) else -- 缺单位/格式声明 print(f{f.name:24} D码{dc:4} 负片{是 if neg else 否}{flag}) if not (u and fm): bad.append(f.name) if bad: print(\n[不通过] 以下层缺声明先补齐再导出, , .join(bad)) else: print(\n[通过] 全部层声明齐全) for d in sorted(root.glob(*.drl)) sorted(root.glob(*.nc)): print(f{d.name:24} 钻孔坐标点{drill_count(d)})脚本里有两个判断值得展开。负片判定用%LPC*%清空和%LPD*%绘制的出现次数做粗略估计负片层这两个指令的比例通常明显偏离 1:1这是启发式判断不是精确规则所以只作为提示不给结论。钻孔坐标点数用正则匹配以X开头且包含Y的行这个模式对绝大多数 Excellon 文件成立但遇到用增量坐标的文件会少算所以数字只用于跟网络表的引脚数做量级比对不要求完全相等。三条硬规矩是脚本替代不了的必须人工过一遍。第一板框必须是闭合轮廓。用“检查连通性”之类的功能跑一次断开的轮廓在铣边的时候会多切一刀或者少切一刀两种都是报废。第二所有层的单位必须统一。混单位的情况在拼板 step 里特别容易发生——单元是毫米工艺边是英寸画的时候不觉得导出来就错位。第三Mark 点单独出一层给板厂确认。不要只放在阻焊层里让人家自己找画成单独的文档层标注直径和净空要求省掉一轮沟通。从那以后我每次出片前不管多急都会把这张表和脚本强制走一遍哪怕只是改了一根走线。有一回赶进度跳过了结果整批板的阻焊极性是反的返工的费用够买好几套工具了。希望帮到你。本文还有配套的精品资源点击获取
阅读完成 · 觉得有帮助?