当前位置:首页 > 工程设计 > 脚本

CAM350 脚本开发实战:第一个弹窗宏

2026-11-08脚本55
CAM350 脚本开发实战:v12.1 第一个弹窗宏与 Macro → Play 无反应排查

CAM350 脚本开发实战:v12.1 第一个弹窗宏与 Macro → Play 无反应排查

在 PCB / FPC 制造资料处理里,加板边、拼板、层命名、批量出报告这些动作每天都在重复。CAM350 的宏(Macro)是把重复劳动固化下来最轻量的入口。本文以使用最广的 v12.1 为例,从一行 Hello World 弹窗开始,讲清 .scr 脚本的写法、文件规范与运行方式,并记录一次「点 Macro → Play 完全没反应」的真实排错过程 —— 最后原因不在代码,而在软件安装本身。

适用版本:CAM350 v12.1(及 10.x ~ 14.5 通用)| 关键词:.scr 宏、窗体弹窗、宏录制、Macro Play、安装损坏排查

一、先分清版本:CAM350 有两套互不兼容的脚本体系

这是入门最容易踩的坑。网上不少「CAM350 脚本教程」把两套语法混着写,照抄必然跑不起来。版本决定路线:

项目.scr 宏(BASIC).vbs(VB Automation API)
可用版本10.x ~ 14.5,几乎全版本14.6 起新增(2023,Build 1834+)
引擎内置类 BASIC 解释器,变量带后缀WinWrap Basic,#Language "WWW-COM"
入口Macro → Record / Play,脚本存安装目录 ScriptsHome ribbon → Script Editor / Record Script
能力窗体交互、字符串与文件操作、调用带 @ 后缀的 CAM 底层命令90+ 对象、1000+ 属性方法,可挂接外部 COM
文档老版 camnt95.chm → Macro Menu / Basic 章节Script Editor → Help → CAM350 Automation API;示例在安装目录 Scripts

本文的 v12.1 只能走 .scr 路线,14.6 的 VB API 在这里完全用不上。顺带一提,14.6 的 VB 接口也没有覆盖 View / Query、Cross-probe、Test 检查、Analyze 里的 DRC / DFF 规则检查、StackUp Visualizer 与 3D View;但 Stream Editor 是完整启用的,所以批量 DFM 的正确做法是让脚本调用 DFM Stream,而不是去找检查命令的对象。

二、.scr 文件的三条硬性规范

宏解释器很老,对文件格式比一般脚本敏感。写第一个脚本之前先固定这三条:

  1. CRLF 换行。LF-only 的文件在部分版本会整段静默失效 —— 不报错、不弹窗、什么都没有。

  2. 纯 ASCII / ANSI,无 BOM。老版对中文注释容易乱码,路径也尽量别带中文;用记事本另存时选 ANSI,别选 UTF-8 带 BOM。

  3. 扩展名真的是 .scr。Windows 默认隐藏扩展名,「另存为」很容易得到 hello_world.scr.txt,这类文件在 Play 对话框里根本不会被当作宏。

语法上记住几个特征即可:变量后缀 % 整型、# 实型、$ 字符串;注释用单引号 ';CAM 底层命令以 @ 结尾(如 view_all@、setlayer@);流程用 if...then、goto 900 数字行标、select case、for..next。


微信图片_20261108001252_53_407.png

三、Hello World:三种弹窗写法

写法 A:最简 PRINT

print "Hello world !"
end

手册里 PRINT 会打开一个带 OK 按钮的消息窗口并暂停宏等待点击,确实就是弹窗。但在部分汉化 / 修改版里,这类消息会被送进界面底部的 System Messages 面板(默认折叠),看起来就像「没反应」。

写法 B:标准消息框 MESSAGE_BOX

message_box "Hello world !", "CAM350 v12.1", INFORMATION, N%
if N% = 1 then end

按钮与图标常量:INFORMATION(OK + i 图标)、WARNING、ERROR、OKCANCEL、YESNO、YESNOCANCEL、RETRYCANCEL。返回值 1=OK、2=Cancel、3=Abort、4=Retry、5=Ignore、6=Yes、7=No。注意不同手册里该命令也写作 MessageBox,若报未知命令就换回写法 A 或 C。

写法 C:自定义窗体(最稳,推荐)

OpenForm #1, 34, 6, "CAM350 v12.1", character, OK
AddForm #1, 2, 2, "Hello world !", PRINT
DisplayForm #1
DeleteForm #1
end

OpenForm 建窗体(编号、宽、高、标题、单位 character / pixel、按钮),AddForm 加标签或控件,DisplayForm 显示并等待用户点击,DeleteForm 卸载。这是实打实的模态窗口,不受 System Messages 面板影响,也是后续做参数输入界面的基础。

补充:PRINT_MSG 与 PRINT 不同 —— 它显示消息但不暂停宏,消息会一直留在屏幕上直到 CLOSE_MSG,做进度提示时通常配 DELAY 1000 使用。

四、怎么运行

  1. 把 .scr 拷到 CAM350 安装目录的 Scripts 文件夹(Play 对话框默认就指向这里)。

  2. 菜单 Macro → Play 选中文件;部分 v12.1 版本入口是 Tools → Macro → Play,选中后还需点一次「打开」。

  3. 更推荐 Macro → Assign → Function Keys,把脚本绑到 F2 一键触发。F1~F12 加上 Shift / Ctrl 组合共 34 个可分配键位,比每次选文件快得多。

五、进阶:带参数窗体的冒烟测试脚本

环境刚装好、或者刚换版本时,用一个脚本把宏引擎的主要能力全过一遍,比只跑 Hello World 更有价值。下面这份覆盖 INPUT 输入框、CHOICE 单选、CHECK 复选、formcancel(1) 取消跳转、字符串拼接与连续两个窗体:

pcbno$ = ""
mode% = 1
gold% = 0
OpenForm #1, 50, 9, "CAM350 v12.1 smoke test", character, OKCANCEL
AddForm #1, 0, 0, "Hello world !", PRINT
AddForm #1, 0, 2, "Job no:", INPUT, pcbno$, 20
AddForm #1, 0, 4, "Mode:", CHOICE, mode%, "Route", "V-cut"
AddForm #1, 0, 6, "Gold finger", CHECK, gold%
DisplayForm #1
if formcancel(1) then goto 900
DeleteForm #1
msg$ = "Hello world ! " + pcbno$
OpenForm #2, 40, 5, "Result", character, OK
AddForm #2, 2, 1, msg$, PRINT
DisplayForm #2
DeleteForm #2
900 end

能弹出第一个参数窗体、填完点 OK 再弹出带板号的结果窗体,就说明窗体、交互与流程控制都正常,后面写业务宏不必再怀疑环境。


f8b8fb10-a17e-409a-aa50-3fdaa07bb255.png

六、实战排错:Macro → Play 完全没反应

本次真实遇到的是:脚本选中后点 Play,界面毫无变化,也没有任何报错。按下面顺序排查,成本从低到高:

  1. 最小对照:先跑只有 print + end 的两行脚本。两行版也没反应,100% 是文件没被加载,与代码无关。

  2. 扩展名:在资源管理器看「类型」列,确认不是 .scr.txt。

  3. 路径与菜单:确认文件在 Scripts 目录、菜单入口正确、选中后点了「打开」;也可以用 Function Keys 绑定绕开菜单差异。

  4. 金标准:让软件自己生成一份。Macro → Record 随便录几步再 Stop,用记事本打开 CAM350 生成的 .scr,对照它的换行、编码和首行格式,把自己的代码按同样格式粘进去。这一步能一次判定是加载问题还是语法兼容问题。

  5. 格式与环境:检查 CRLF / ANSI / 无 BOM;确认有打开的 CAM 文档;查看 System Messages 面板是否被折叠;必要时用 Macro → Debug 单步执行。

  6. 用日志区分「宏没跑」和「窗口没显示」,在脚本最前面加三行:

open "C:\cam_macro_test.txt" for output as #2
print #2, "macro ran"
close #2

日志文件出现 ⇒ 宏已执行,只是窗口没显示;没出现 ⇒ 宏根本没被加载,回到第 2、3、4 步。

本次最终结论:以上都排除后,问题出在软件安装本身。连录制的宏都无法正常回放、任何 .scr 都是静默无反应,属于典型的安装损坏。重装 CAM350 v12.1 后宏引擎恢复正常,脚本一行未改即可弹出窗口。所以「宏完全无反应」这件事,除了查脚本格式,也要把安装完整性列进检查项 —— 判断依据很简单:Record 能否正常生成 .scr。

重装会重置安装目录,Scripts 里的脚本会被清空,务必把自写宏单独备份一份。

七、上生产前还要注意

  • 宏回放强依赖层序、板框尺寸、单位、D 码表一致;拼板宏尤其要求工艺边尺寸完全相同,否则整批跑偏。

  • Gerber / Excellon 的 English / Metric 与 leading / trailing zero suppression 口径不统一,坐标会整体偏移,脚本里先固定单位再操作。

  • 宏里加日志与 FILEEXISTS 校验,批量跑之前先用单板验证一遍。

  • 若将来升到 14.6:它是 64 位程序,装了 BluePrint-PCB 6.x 后 32 位 Office 会失效,脚本若通过 COM 写 Excel 报表要注意位数。

八、资料排雷:这些「教程」是错的

搜索 CAM350 脚本资料时会遇到大量 AI 生成的拼凑内容,下面几种说法都跑不起来:

网传说法判定
var / let / const、console.log、function main()、// 注释套了 JavaScript 模板,CAM350 .scr 无此语法
用 TCL 脚本 get_polygons 做残铜检测CAM350 不提供 TCL 接口
M97 宏命令调用 .vbs 做语义比对杜撰
ActiveDocument.Layer(...)、支持 JScript、录制产物写成 LAYER:Visible(TOP,1)通用 VBScript 模板套壳,非 CAM350 对象模型

可信来源只有四个:官方 Release Notes(DownStream Technologies 官网)、安装目录 Scripts 里的示例、Script Editor / camnt95.chm 的帮助文档,以及自己录一段宏 —— 最后这条最可靠。

九、小结

v12.1 的脚本开发起点很低:一个 CRLF、纯 ASCII 的 .scr 文件,五行 OpenForm 就能弹出第一个窗口。真正的门槛不在语法,而在三件事:认清版本对应的脚本体系、守住老解释器的文件格式规范、以及遇到「完全没反应」时有一套从最小对照到安装完整性的排查顺序。跑通弹窗之后,加板边与流程字、按板号选工艺流程、拼板、Gerber 批量导入与层命名、DFM 报告导出,都可以沿着「录制 → 抽参数 → 加日志 → 批量回放」这条链路逐步固化下来。

原创技术稿 · 适用 CAM350 v12.1 · 转载请注明出处

扫描二维码推送至手机访问。

版权声明:本文由FPC信息网发布,如需转载请注明出处。

本文链接:https://www.fpc.cc/article/341.html

分享给朋友: