配方 DSL 参考
APS 配方语言是一种基于行的领域专用语言(DSL),用于自动化真空镀膜工艺。每一行包含一条命令及其参数,以空白字符分隔。除非由流程控制结构改变执行顺序,配方将自上而下顺序执行。
这与 Recipe Editor(配方编辑器) 语言面板中提供的参考内容相同。
语言基础
行格式
command arg1 arg2 ... # 可选注释
每个非空行都会被解析为一个命令(第一个词),后跟零个或多个参数(标识符、数字或字符串)。注释以 # 或 // 开头,一直延伸到行尾。空行和仅含注释的行会被忽略。
数据类型
| 类型 | 示例 | 说明 |
|---|
| 整数 | 5、-10、0 | 有符号整数 |
| 浮点数 | 0.05、-3.14、1e-5 | 支持小数与科学计数法 |
| 字符串 | "hello" | 双引号包裹;支持 \n、\t、\\、\" 转义 |
| 布尔值 | true、false、open、closed、on、off | 别名会被替换:open/on → true,close/closed/off → false |
| 标识符 | M1、Ar1、pm | 设备或传感器名称;可包含字母、数字、下划线和点 |
变量
变量用 var 声明,用 $ 前缀引用。变量名不区分大小写。
var flow_rate = 15
var gas Ar1
MFC $gas $flow_rate
内置系统变量:
$_i —— 当前循环迭代序号(从 0 开始),在 loop 块内自动设置
$pressure —— 当前系统压力(只读,来自传感器提供方)
$temperature —— 当前系统温度(只读)
$time —— 当前配方已运行时间(只读)
配方外壳
配方可选地用 begin / end 标记包裹。它们在执行时会被静默跳过,仅用于视觉上的清晰。
begin
valve M1 open
delay 5
valve M1 close
end
流程控制命令
| 命令 | 语法 | 说明 |
|---|
begin | begin | 可选的配方开始标记,运行时无效果。 |
end | end | 可选的配方结束标记,运行时无效果。 |
loop | loop count | 开始一个重复 count 次的循环块。count 可为整数字面量或 $variable。会将 $_i 设为当前从 0 开始的迭代序号。 |
endloop | endloop | 结束循环块,必须与前面的 loop 配对。 |
if | if sensor_or_var op value | 条件分支。条件为真时执行随后的块。运算符:<、>、=、==、<=、>=、!=。左侧可为传感器 ID 或 $variable;右侧可为数字、$variable 或布尔关键字。 |
else | else | 前面 if 的可选备选分支。 |
endif | endif | 结束 if/else 块,必须与前面的 if 配对。 |
label | label name | 定义一个具名跳转目标。标签名在配方内必须唯一,运行时无效果。 |
goto | goto name | 无条件跳转到具名标签。目标必须存在于当前执行作用域内。 |
# 使用变量作为循环次数
var cycles = 3
loop $cycles
MFC Ar1 15
delay 5
MFC Ar1 0
delay 2
endloop
# 基于传感器读数的条件判断
if pm < 0.05
valve M1 open
else
valve M1 close
endif
# 标签与跳转
label retry
pwait pm 0.01 60
check pm < 0.05
goto retry
函数
函数可让你定义带参数、可复用的命令序列。
| 命令 | 语法 | 说明 |
|---|
function | function name(param1, param2, ...) | 开始一个具名函数定义。参数在调用时成为局部变量。 |
endfunction | endfunction | 结束函数定义,必须与前面的 function 配对。 |
| name | name arg1 arg2 ... | 调用先前定义的函数,将位置参数绑定到参数名。 |
function purge_gas(gas, flow, time)
MFC $gas $flow
delay $time
MFC $gas 0
endfunction
# 调用函数
purge_gas Ar1 20 10
purge_gas N2 15 5
变量声明
| 命令 | 语法 | 说明 |
|---|
var | var name = value 或 var name value | 声明或更新变量。= 号可省略。取值可为数字、字符串、布尔值(true/false)或标识符。 |
var target_pressure = 0.05
var gas_name Ar1
var use_bias = true
计时命令
| 命令 | 语法 | 参数 | 说明 |
|---|
delay | delay seconds | seconds —— 整数,等待时长 | 暂停配方执行指定的秒数。 |
wait | wait seconds | seconds —— 整数,等待时长 | delay 的别名,暂停执行给定时间。 |
pwait | pwait sensor target timeout | sensor —— 传感器 ID;target —— 浮点数,目标压力;timeout —— 整数,最长等待秒数 | 等待传感器读数下降到 target 或以下,或直到 timeout 秒耗尽。用于抽真空压力等待。 |
pressure | pressure sensor target timeout | (同 pwait) | pwait 的别名,行为相同。 |
check | check sensor condition value | sensor —— 传感器 ID;condition —— 比较运算符;value —— 浮点数,阈值 | 读取当前传感器值并与阈值比较。若条件不满足则抛出错误(即时检查,不等待)。 |
delay 10 # 等待 10 秒
pwait pm 0.05 60 # 等待压力 < 0.05,超时 60 秒
pressure pl 0.01 120 # 同 pwait,使用不同传感器
check pm < 0.1 # 断言压力低于 0.1
设备命令
阀门控制
| 语法 | 参数 | 说明 |
|---|
valve id action | id —— 阀门名称(如 M1、V2、V6);action —— open 或 close(也接受 true/false) | 打开或关闭阀门。 |
valve M1 open
valve V6 close
MFC(质量流量控制器)
| 语法 | 参数 | 说明 |
|---|
MFC id setpoint | id —— MFC 名称(如 Ar1、N2);setpoint —— 浮点数,流量(sccm,0 表示关闭) | 将质量流量控制器设为给定流量。 |
MFC Ar1 15
MFC Ar1 0 # 关闭气体流量
泵控制
| 语法 | 参数 | 说明 |
|---|
pump id action | id —— 泵名称;action —— on 或 off(也接受 true/false) | 开启或关闭真空泵。 |
pump TP1 on
pump TP1 off
平移台定位
| 语法 | 参数 | 说明 |
|---|
stage id position | id —— 平移台名称(如 VS);position —— 浮点数,目标位置(mm) | 将直线平移台移动到指定位置。 |
stage VS -10
偏压 / 电源
| 语法 | 参数 | 说明 |
|---|
bias id mode value | id —— 电源名称;mode —— 工作模式(如 voltage、current);value —— 浮点数,设定值 | 以指定模式和数值配置偏压电源。 |
挡板控制
| 语法 | 参数 | 说明 |
|---|
shutter id position | id —— 挡板/驱动名称;position —— open 或 close | 打开或关闭镀膜挡板。 |
样品架(基片旋转)
| 语法 | 参数 | 说明 |
|---|
holder id action | id —— 样品架驱动名称;action —— on 或 off | 启动或停止样品架旋转。 |
旋转
| 语法 | 参数 | 说明 |
|---|
rotation action [speed] | action —— on 或 off;speed —— 可选浮点数,旋转速度 | 控制基片旋转。开启时可提供可选的速度参数。 |
rotation on 5.0
rotation off
复合命令
复合命令是将多个设备动作组合为单个步骤的高级操作。它们通常作为运行时从 DLL 加载的外部执行器(worker)操作定义。
| 命令 | 语法 | 说明 |
|---|
warmup | warmup device time power | 运行靶材预热例程:以指定功率为设备供电给定时间。 |
scan | scan device start end step | 将某设备参数从 start 以 step 为增量扫描到 end。 |
deposit | deposit device thickness time | 在指定靶源上运行定时沉积,目标为给定厚度和时长。 |
set | set device param value | 将任意设备参数设为某值,用于通用设备配置。 |
操作员交互
| 命令 | 语法 | 说明 |
|---|
message | message text... | 向操作员显示一个带指定文本的模态对话框。配方执行暂停,直到操作员点击 OK 确认。适用于人工干预步骤。 |
message "装入基片并关闭腔门"
message 检查冷却水流量
命令大小写
命令名称不区分大小写:MFC、mfc 和 Mfc 完全等价。设备与传感器 ID 会与硬件配置进行匹配,通常也不区分大小写。变量名同样不区分大小写。
取值替换
命令被分派到硬件层之前,某些关键字取值会被自动替换:
| 配方中写法 | 替换后取值 |
|---|
open | true |
close / closed | false |
on | true |
off | false |
嵌套规则
loop、if 和 function 块最多可嵌套 8 层(最大嵌套深度)。
function 定义不能出现在 loop 块内部。
goto 目标必须位于当前执行作用域内 —— 不能跳入或跳出循环、函数或条件块。
- 每个
if 最多只能有一个 else 分支。
- 所有块结构都必须正确闭合:
loop/endloop、if/endif、function/endfunction。
校验
配方校验器在执行前进行五个阶段的检查:
- 分词 —— 确保文本可被解析为有效的词法单元。
- 结构 —— 校验块成对匹配(loop/endloop、if/endif、function/endfunction),检查嵌套深度,校验标签唯一性,并确认 goto 目标存在。
- 命令 —— 检查命令名称已识别且具备所需的最少参数数量。
- 变量 —— 确认所有
$variable 引用要么以 var 声明,要么是函数参数,要么是已知系统变量。
- 设备 —— 校验硬件命令(valve、mfc、pump、stage、sensor、power)中使用的设备名称在硬件配置中存在。
完整示例
begin
# 声明变量
var base_pressure = 0.05
var sputter_time = 30
# 抽真空
pump TP1 on
pwait pm $base_pressure 120
# 通气
valve M1 open
valve V2 open
MFC Ar1 15
delay 10
# 确认压力已稳定
check pm < 0.1
# 旋转下沉积
rotation on 3.0
shutter S1 open
loop 3
MFC Ar1 20
delay $sputter_time
MFC Ar1 10
delay 5
endloop
# 关机序列
shutter S1 close
rotation off
MFC Ar1 0
valve V2 close
valve M1 close
pump TP1 off
message "工艺完成 —— 可以卸载"
end