跳到主要内容

编写运动程序

示教好点位后,在 SCL 编辑器中编写运动程序,控制机器人按顺序执行动作。

基本运动指令

MOVJ — 关节运动

机器人各关节同时转动到目标位置。速度快,但 TCP 路径不确定。用于不关心路径、只要快速到达的场景。

MOVJ Home, Speed := 50;            // 50% 速度回到 Home
MOVJ Pick_Above, Speed := 80; // 80% 速度到取料上方

MOVL — 直线运动

TCP(工具中心点)沿直线移动到目标位置。用于需要精确路径的场景,如下降取料、沿边焊接。

MOVL Pick, Speed := 20;            // 直线缓慢下降到取料位
MOVL Place, Speed := 20; // 直线缓慢下降到放料位

HOME — 回原点

HOME Speed := 30;                  // 回到机械原点

速度与加速度

参数说明范围
Speed运动速度 (% 或 mm/s)1 ~ 100%
Accel加速度 (%)1 ~ 100%
Zone转角平滑半径 (mm)0 = 精确到位
// Zone > 0 时,机器人在接近目标点时不停顿,直接平滑过渡到下一段运动
MOVJ Point1, Speed := 80, Zone := 50; // 50mm 范围内开始过渡
MOVL Point2, Speed := 50, Zone := 10; // 10mm 精度过渡
MOVL Point3, Speed := 50, Zone := 0; // 精确到达,完全停顿

配合 IO 信号

运动程序中经常需要配合 IO 信号控制夹爪、气缸等:

// 等待信号
WAIT DI[1] = TRUE; // 等待传感器检测到工件
WAIT DI[2] = TRUE, Timeout := 5.0; // 最多等 5 秒

// 输出信号
DO[1] := TRUE; // 打开夹爪
DO[2] := FALSE; // 关闭气缸

// 延时
DELAY 0.5; // 等待 0.5 秒

完整取放程序示例

PROGRAM PickAndPlace
VAR
CycleCount : INT := 0;
END_VAR

// 回到初始位置
MOVJ Home, Speed := 50;

WHILE TRUE DO
// === 取料 ===
MOVJ Pick_Above, Speed := 80, Zone := 20; // 快速到取料上方
MOVL Pick, Speed := 15; // 缓慢直线下降
DO[1] := TRUE; // 夹爪关闭
DELAY 0.3; // 等待夹紧
MOVL Pick_Above, Speed := 30; // 抬起

// === 放料 ===
MOVJ Place_Above, Speed := 80, Zone := 20; // 快速到放料上方
MOVL Place, Speed := 15; // 缓慢直线下降
DO[1] := FALSE; // 夹爪打开
DELAY 0.3; // 等待松开
MOVL Place_Above, Speed := 30; // 抬起

CycleCount := CycleCount + 1; // 计数
END_WHILE;
END_PROGRAM

多点路径程序示例

PROGRAM WeldingPath
VAR
WeldOn : BOOL := FALSE;
END_VAR

// 移动到焊接起点上方
MOVJ Weld_Start_Above, Speed := 60;
MOVL Weld_Start, Speed := 10; // 精确到达起点

// 开始焊接
DO[3] := TRUE; // 起弧
DELAY 0.2;

// 沿焊缝直线运动
MOVL Weld_Point1, Speed := 5; // 焊接速度
MOVL Weld_Point2, Speed := 5;
MOVL Weld_Point3, Speed := 5;
MOVL Weld_End, Speed := 5;

// 停止焊接
DO[3] := FALSE; // 收弧
DELAY 0.3;

// 撤回
MOVL Weld_End_Above, Speed := 20;
MOVJ Home, Speed := 50;
END_PROGRAM
编程建议
  1. 安全高度:取放动作总是先移到上方安全高度,再直线下降,避免碰撞
  2. Speed 参数:空行程用高速(6080%),接近工件用低速(1020%)
  3. Zone 参数:连续运动路径用 Zone > 0 提高效率,最后一点用 Zone := 0 精确到位
  4. DELAY 不要省略:夹爪/气缸需要时间动作,建议至少 0.2~0.5 秒

MOVJ 技术原理

关节空间轨迹

MOVJ 在关节空间插补, 所有关节同时启动、同时到达目标. 每个关节从当前角度 q_start 到目标 q_end 的时间:

T_i = max(|Δq_i| / v_i, sqrt(2 · |Δq_i| / a_i))   (各轴独立)
T_move = max(T_i) (取最慢的那轴)

然后所有轴按同步时间 T_move 放缩速度曲线, 保证同步到达. 这样 TCP 的笛卡尔路径是弧线, 而不是直线。

速度曲线

Darra 支持 3 种速度曲线:

曲线加减速段平滑度计算开销
梯形 (Trapezoid)线性C⁰ (加速度有跃变)最小
S 曲线 (S-Curve)正弦C¹ (加加速有跃变)
7 段 S 曲线抛物线C² (平滑)

默认使用 7 段 S 曲线, Jerk 受控, 机器人机械振动最小。

高级参数

Jerk (加加速度 / 跃度)

MoveJ(
Target := Home,
Velocity := 100,
Acceleration := 500,
Deceleration := 500,
Jerk := 5000 // mm/s³ 或 °/s³
);

Jerk 大 → 响应快, 机械振动大 Jerk 小 → 响应慢, 平滑

典型工业臂 Jerk = 5000~10000。

同步模式

MoveJ(
Target := P1,
SyncMode := SYNC_JOINT // 所有轴同步到达 (默认)
// SYNC_NONE = 各轴独立跑完, 可能先后到
// SYNC_TIME = 所有轴按同一时间曲线缩放, 时间一致
);

生产环境总是用 SYNC_JOINT, SYNC_NONE 只在调试单轴时用。

MC_MoveJointAbsolute 功能块

VAR
mcJ : MC_MoveJointAbsolute;
END_VAR

mcJ(
Robot := Robot1,
Execute := bStart,
TargetJoint := (J1 := 0, J2 := -90, J3 := 90, J4 := 0, J5 := -90, J6 := 0),
Velocity := 100,
Acceleration := 500,
Deceleration := 500,
Jerk := 5000,
Zone := 0
);

IF mcJ.Busy THEN
// 运动中
END_IF;
IF mcJ.Done THEN
// 到达
mcJ(Execute := FALSE); // 复位
END_IF;
IF mcJ.Error THEN
ErrorHandle(mcJ.ErrorId);
END_IF;

MOVJ 与 MOVL / MOVC 对比

指令关节空间/笛卡尔TCP 路径速度上限姿态精度典型用途
MOVJ关节弧 (不可控)最快关节级空行程
MOVL笛卡尔直线姿态插值工作行程
MOVC笛卡尔圆弧姿态插值圆弧焊
MOVS (Spline)笛卡尔曲线姿态插值自由曲线

不关心路径只要快 → MOVJ, 这是黄金法则。

与 PLCopen 兼容性

MOVJ 简写指令编译后等价于:

MC_MoveJointAbsolute(
Robot := <当前机器人>,
Execute := TRUE,
TargetJoint := <点位对应关节>,
Velocity := <Speed %, 转成 °/s>,
...
);

两种写法可混用, 简写适合快速编程, 功能块适合需要完整状态机 (Busy / Done / Error 判断)。

参数表

参数类型单位范围默认说明
Target / TargetJointROBOT_JOINT / 点位名---目标关节角
VelocityLREAL% 或 °/s0.1..100 或 >050速度
AccelerationLREAL%/s 或 °/s²0.1..100100加速度
DecelerationLREAL%/s 或 °/s²0.1..100100减速度
JerkLREAL°/s³-5000跃度
ZoneLREAL° 或 mm0..500平滑半径
SyncModeENUM-NONE/JOINT/TIMEJOINT同步模式
BufferModeENUM-ABORT/BUFFER/BLENDBUFFER连续运动衔接
ToolIdUINT-0..150工具号 (MOVJ 通常不用, 目标按关节指定)

排错清单

现象原因解决
某关节转了 > 180°没用 Turn 记录, 走了长路径用构型正确的点位
运动卡顿Jerk 太大减 Jerk 到 3000~5000
连续 MOVJ 段间停顿Zone = 0中间段设 Zone > 0
超时报警Velocity 设得比机械能力大查机型速度上限
报 "Target out of limit"关节角超限位检查点位值
到达点位姿不对点位构型错重记录点位保留 Config

最佳实践

  1. 空行程首选 MOVJ: 从一个工位到另一个工位, MOVJ 最快
  2. Zone 合理: 相邻 MOVJ Zone = 20~50, 末段 Zone = 0
  3. 不要接近奇异: 关节空间运动不受奇异影响, 但到达点的姿态可能在奇异 → 仍要避开
  4. MOVJ + MOVL 混合: 整个程序 70% MOVJ + 30% MOVL 的比例
  5. 加减速对称: 加速 = 减速, 机械振动最小
  6. 初次调试用 30% 速度: 所有点位验证一遍再提速
  7. 3D 仿真必跑: MOVJ 路径不可预测, 仿真里看 TCP 轨迹有没有穿工装

相关文档