运动指令参考
本页汇总所有机器人运动相关指令和参数,供编程时快速查阅。
运动指令一览
| 指令 | 说明 | 路径类型 | 速度 |
|---|---|---|---|
MOVJ | 关节运动 | 不确定(各轴同时到达) | 快 |
MOVL | 直线运动 | TCP 走直线 | 中 |
MOVC | 圆弧运动 | TCP 走圆弧(需要中间点) | 中 |
HOME | 回原点 | 关节运动到机械零位 | 慢 |
指令语法
MOVJ
MOVJ 目标点位 [, Speed := 速度] [, Accel := 加速度] [, Zone := 平滑半径];
MOVL
MOVL 目标点位 [, Speed := 速度] [, Accel := 加速度] [, Zone := 平滑半径];
MOVC
MOVC 中间点位, 目标点位 [, Speed := 速度];
HOME
HOME [Speed := 速度];
参数说明
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| Speed | REAL | 50 | 运动速度。MOVJ 使用 % (1~100);MOVL 可用 mm/s |
| Accel | REAL | 50 | 加速度百分比 (1~100) |
| Zone | REAL | 0 | 转角平滑半径 (mm)。0 = 精确停顿到位 |
辅助指令
| 指令 | 说明 | 示例 |
|---|---|---|
DELAY | 延时等待 (秒) | DELAY 0.5; |
WAIT | 等待条件成立 | WAIT DI[1] = TRUE; |
WAIT ... Timeout | 带超时等待 | WAIT DI[1] = TRUE, Timeout := 3.0; |
IO 操作
| 操作 | 示例 |
|---|---|
| 读取数字输入 | IF DI[1] = TRUE THEN ... |
| 写数字输出 | DO[1] := TRUE; |
| 读取模拟输入 | val := AI[1]; |
| 写模拟输出 | AO[1] := 5.0; |
运动选择指南
MOVJ vs MOVL 怎么选
- 空行程(从一个工位到另一个工位)→
MOVJ,速度最快 - 工作行程(接近/离开工件、焊接/涂胶路径)→
MOVL,路径精确 - 经验法则:不碰东西的用 MOVJ,碰东西的用 MOVL
MOVL 技术原理
笛卡尔空间直线插补
MOVL 在笛卡尔空间沿 TCP 直线插补. 每个插补周期 (1 ms) 系统计算下一个 TCP 位姿, 再用逆运动学求出 6 个关节角作为伺服目标。
for each 1 ms:
u = t / T_total (0..1)
pos = pos_start + u · (pos_end - pos_start) (直线)
ori = Slerp(ori_start, ori_end, u) (姿态球面插值)
q = InverseKinematics(pos, ori, config) (逆解)
下发 q 到伺服
姿态插值 (Slerp)
姿态用四元数球面线性插值:
Slerp(q0, q1, u) = q0 · sin((1-u)·θ) / sin(θ) + q1 · sin(u·θ) / sin(θ)
其中 θ = arccos(q0 · q1), 保证姿态沿最短球面路径变化, 不会突然翻转。
MC_MoveLinearAbsolute 功能块
VAR
mcL : MC_MoveLinearAbsolute;
END_VAR
mcL(
Robot := Robot1,
Execute := bStart,
TargetPosition := pPick,
Velocity := 50.0, // mm/s
Acceleration := 500.0, // mm/s²
Deceleration := 500.0,
Jerk := 5000.0, // mm/s³
Zone := 2.0,
OriMode := ORI_INTERPOLATE,
ToolId := 1,
UserFrameId := 1,
ConfigStrict := FALSE, // TRUE = 严格用点位的 Config, FALSE = 允许切换
BufferMode := BUFFER
);
姿态模式
MOVL 默认姿态沿起终点 Slerp 插值. 也可指定:
| OriMode | 效果 |
|---|---|
| ORI_INTERPOLATE | Slerp (默认) |
| ORI_KEEP_START | 保持起点姿态 |
| ORI_KEEP_END | 立即跳到终点姿态 (罕用) |
| ORI_PATH_FOLLOW | 姿态跟随切线 (MoveC/Spline 常用, MoveL 下意义不大) |
速度 / 加速度单位
| 指标 | 单位 | 典型值 |
|---|---|---|
| TCP 速度 Velocity | mm/s | 20 (焊接) ~ 500 (搬运) |
| TCP 加速度 Acceleration | mm/s² | 200 ~ 2000 |
| TCP 跃度 Jerk | mm/s³ | 2000 ~ 10000 |
| 姿态速度 OriVelocity | °/s | 30 ~ 180 |
| 姿态加速度 OriAcceleration | °/s² | 300 ~ 1800 |
TCP 速度和姿态速度各自有限制, 系统取更严格的那个作为整段约束。
构型切换 (Config Flip)
直线运动中, 如果终点 Config 与起点不同, 机器人需经过奇异点翻转构型. Darra 默认:
ConfigStrict = TRUE: 严格要求点位的 Config, 无法到达报错ConfigStrict = FALSE: 允许走不同 Config 到达, 但插值不平滑
稳妥做法: 示教时固定构型, 不让构型切换在 MOVL 中发生。
Zone 详解
Zone 几何
Zone 半径 R 内, TCP 不精确到达 EndPoint, 而是沿过渡曲线 (圆弧或三次曲线) 平滑到下一段:
实际路径: P_prev ─── straight ──→ 半径 R 处入弯 ─ blend ─→ 出弯 ──→ P_next
|<---- zone 区 ---->|
Zone 越大过渡越平滑, 速度损失越小, 但偏离示教点越多。
Zone 推荐
| 场景 | Zone |
|---|---|
| 精确到位 (取放, 焊点) | 0 |
| 焊缝中间点 | 1~3 mm |
| 连续弧段 | 2~5 mm |
| 空行程中转 | 20~50 mm |
焊接最后一点 Zone = 0, 否则焊枪会提前收弧偏离焊缝。
同步 IO
MOVL 执行中可触发 IO:
mcL(
Robot := Robot1, Execute := TRUE,
TargetPosition := pWeld_End,
Velocity := 10.0,
TriggerType := TRIG_DISTANCE, // 按距离触发
TriggerValue := 5.0, // 距终点 5 mm
TriggerOutput := ADR(DO_Arc), // 触发的 IO
TriggerState := FALSE // 置为 FALSE (收弧)
);
焊接尾段提前 5 mm 收弧可以避免尾部熔池溅落。
示例: 精密插销装配
PROGRAM PinInsertion
VAR
mcJ, mcL1, mcL2 : MC_MoveLinearAbsolute;
step : INT := 0;
END_VAR
CASE step OF
0: // 快速接近
mcJ(..., TargetPosition := pApproach, Velocity := 300);
IF mcJ.Done THEN step := 10; END_IF;
10: // 慢速直线下降, 距离 10 mm
mcL1(..., TargetPosition := pPre_Insert,
Velocity := 20, Zone := 0);
IF mcL1.Done THEN step := 20; END_IF;
20: // 最后 5 mm 超慢, 允许力反馈
mcL2(..., TargetPosition := pInserted,
Velocity := 2, // 2 mm/s
ForceMonitor := TRUE,
ForceLimit := 30.0); // 30 N 力限
IF mcL2.Done THEN step := 30; END_IF;
30: // 退出
mcL1(..., TargetPosition := pApproach, Velocity := 50);
END_CASE;
参数表
| 参数 | 类型 | 单位 | 范围 | 默认 | 说明 |
|---|---|---|---|---|---|
| TargetPosition | ROBOT_POS | - | - | - | 目标 |
| Velocity | LREAL | mm/s | 0.1..2000 | 50 | 切向速度 |
| Acceleration | LREAL | mm/s² | 1..10000 | 500 | 加速度 |
| Jerk | LREAL | mm/s³ | 100..100000 | 5000 | 跃度 |
| OriVelocity | LREAL | °/s | 1..720 | 180 | 姿态速度 |
| OriAcceleration | LREAL | °/s² | 1..3600 | 1800 | 姿态加速度 |
| Zone | LREAL | mm | 0..100 | 0 | 平滑半径 |
| OriMode | ENUM | - | - | INTERPOLATE | 姿态模式 |
| ConfigStrict | BOOL | - | - | TRUE | 严格构型 |
| ForceMonitor | BOOL | - | - | FALSE | 力反馈监控 |
| ForceLimit | LREAL | N | 0..500 | 100 | 力上限 |
排错清单
| 现象 | 原因 | 解决 |
|---|---|---|
| 报 "Singularity on path" | 直线路径经过奇异 | 改路径, 插过渡点 |
| 速度跑不到设定 | 曲率限速或关节速度瓶颈 | 降姿态速度或简化路径 |
| 姿态在中间翻转 180° | Slerp 边界情况 | 在中间加姿态约束点 |
| 构型切换报错 | ConfigStrict = TRUE 且点位构型不同 | 改 FALSE 或重示教点位 |
| Zone 大但路径不平滑 | 相邻段速度差太大 | 速度保持连续 |
| 焊道头尾有堆积 | 起弧 / 收弧时机错 | 用 TriggerDistance 提前 / 延后 |
最佳实践
- 工作段用 MOVL: 接触工件的所有动作用直线
- 速度由工艺定: 焊 8 mm/s, 涂胶 40 mm/s, 搬运 200 mm/s
- Zone 与精度权衡: 关键点 Zone = 0, 过渡点 Zone = 2~5
- 姿态对齐工艺: 焊枪垂直焊缝, 涂胶嘴沿切线
- 配 TriggerDistance 精确 IO: 工艺 IO 不是 DELAY, 而是距离触发
- 预先检查路径: 3D 视口看是否经过奇异, 提前绕开
- 力监控加一层保险: 精密装配必开 ForceMonitor