OneScript 例程
以下例程均可直接运行,对应 Samples\OneScripts\ 下的同名 .pgm 文件。假设控制器已连接、轴已配置。
1. 最小运动:使能 + 点位
Enable(X)
MoveAbs(X, 10, F, 100)
WaitMotion(X)
MoveAbs(X, 0, F, 100)
WaitMotion(X)
Print("done")
Disable(X)
2. 流程控制:循环 / 条件 / 子程序
-- programflow.pgm:for / if-elseif / 嵌套循环
local MY_CONSTANT = 6
local arr = {}
for i = 0, MY_CONSTANT do
for j = 0, MY_CONSTANT do
arr[i + j] = i * j
end
end
if i == 4 then
Print("four")
elseif i == 3 then
Print("three")
else
Print("other")
end
-- Subroutines.pgm:子程序必须先定义后调用
local function sqrValue(v)
return v ^ 2
end
Print("sqr = " .. sqrValue(6))
3. 循环运动(VelocityOn 拐角平滑)
-- VelocityProfiling.pgm:VelocityOn 时整个循环不停机
Enable(X, Y)
Abs()
Feed(200)
VelocityOn()
while true do -- 上位机停止脚本即停
Linear(X, 100, Y, 0, F, 200)
Linear(X, 100, Y, 50, F, 200)
Linear(X, 0, Y, 50, F, 200)
Linear(X, 0, Y, 0, F, 200)
end
4. 圆弧(IJ 圆心法)
-- CircleCWCCW.pgm:CW/CCW 圆心 = 起点 + (I, J)
Enable(X, Y)
VelocityOn()
-- 从 (0,0) 顺时针半圆到 (40,0),圆心 (20,0)
CW(X, 40, Y, 0, I, 20, J, 0, F, 100)
-- 逆时针返回
CCW(X, 0, Y, 0, I, -20, J, 0, F, 100)
VelocityOff()
WaitMotion(X, Y)
5. 全局变量:与上位机/示波器交换数据
-- GlobalDoubles.pgm:写变量,供上位机读取/示波器采集
local t = {1.1, 2.2, 3.3}
for i, v in ipairs(t) do
SetGlobal(100 + i - 1, v)
end
SetGlobal(200, math.sin(0.5))
Print("g200 = " .. GetGlobal(200))
上位机侧(C#):double v = controller.Variables.Global.Doubles[200].Value;
6. PCO 栅格打标(WaferRaster.pgm)
10 行扫描,只在窗口内按 20 µm 间距出光。
PcoUnit(0) -- 用户单位 mm
PcoConfig(X, 0.02) -- 每 20 µm 触发
PcoPulse(X, 5) -- 5 µs 脉宽
PcoWindow(X, -25, 25) -- 只在 [-25, 25] mm 内出光
PcoArm(X)
for row = 0, 9 do
MoveAbs(X, -30, F, 50) -- 回扫描起点
WaitMotion(X)
MoveAbs(X, 30, F, 50) -- 恒速扫过窗口
WaitMotion(X)
Print("row " .. row .. " fired = " .. PcoCount(X))
MoveInc(Y, 5, F, 50) -- 步进到下一行
WaitMotion(Y)
end
PcoDisarm(X)
7. PCO 矢量切割(LaserMarking.pgm)
矢量模式按轨迹弧长出光,引入/引出切向衔接 + VelocityOn,全程恒速无过烧。
PcoUnit(0)
PcoConfigV(X, Y, 0.05) -- 沿轨迹每 0.05 mm 触发(两轴同驱动器)
PcoPulse(X, 5)
VelocityOn()
Linear(X, 10, Y, 0, F, 100) -- 引入段
PcoArm(X)
Linear(X, 80, Y, 0, F, 100) -- 直边
CCW(X, 0, Y, 30, I, 0, J, 15, F, 100) -- 半圆端帽
PcoDisarm(X)
WaitMotion(X, Y)
8. 错误处理
local code, cmd = GetLastError()
if code ~= 0 then
Print("failed: " .. cmd .. " error " .. code)
FaultAck() -- 清故障后重来
Enable(X)
end
运行前提与检查
- 控制器已连接(MotionCoder 或 SDK Connect)
- 轴已配置且参数文件已加载
- PCO 例程要求 X/Y 在同一 Z1 驱动器上(矢量模式)
- 脚本内只允许 ASCII(注释和字符串除外)