跳到主要内容

MoveC 圆弧运动

MoveC (Move Circular) 是让 TCP 沿圆弧轨迹运动的指令。MoveJ 走关节空间, MoveL 走直线, MoveC 走圆弧, 三者覆盖绝大多数运动需求。典型应用: 圆弧焊、圆周涂胶、法兰密封、避障绕行。

概述

圆弧的确定

空间一个圆弧需要三个点:

  1. 起点 (P1) — 当前机器人位置 (程序执行 MoveC 时的所在点)
  2. 辅助点 / 中间点 (P2) — 圆弧经过的某一点, 用来定义圆弧平面和方向
  3. 终点 (P3) — 圆弧结束位置

系统由 P1 / P2 / P3 反推出圆心 O 和半径 R, 然后让 TCP 沿此圆弧从 P1 到 P3。

典型应用

应用圆弧性质姿态变化
圆形焊缝 (法兰密封)全圆或大弧姿态保持垂直焊缝
汽车门洞涂胶多段弧 + 直线姿态跟随切线方向
管道焊接小弧段 + 直线连接姿态沿管壁法线
水泵叶轮打磨螺旋弧姿态跟随叶片角度
绕柱搬运 (避障)半圆姿态固定
拉伸旋转 (圆盒开盖)90° 弧姿态与弧同步转动

基本 MoveC 语法

PLCopen MC_MoveCircularAbsolute

VAR
mcCircle : MC_MoveCircularAbsolute;
END_VAR

mcCircle(
Robot := Robot1,
Execute := bStart,
PathMode := CIRC_BORDER, // CIRC_BORDER (经过中间点) 或 CIRC_CENTER (指定圆心)
AuxPoint := pArc_Mid, // 辅助点 (P2)
EndPoint := pArc_End, // 终点 (P3)
Velocity := 50.0, // TCP 切向速度 mm/s
Acceleration := 200.0,
Deceleration := 200.0,
Jerk := 1000.0,
OriMode := ORI_PATH_FOLLOW, // 姿态模式: 跟随路径 / 保持起点 / 终点插值
Zone := 0.0, // 与下一段的平滑半径
ToolId := 1,
UserFrameId := 1
);

IF mcCircle.Done THEN
; // 下一步
END_IF;

两种圆弧模式

模式定义方式适用
CIRC_BORDER起点 + 中间点 + 终点一般弧, 开放圆弧
CIRC_CENTER起点 + 圆心 + 终点 + 方向位已知圆心半径, 如绕柱

CIRC_CENTER 示例

mcCircle(
Robot := Robot1,
Execute := TRUE,
PathMode := CIRC_CENTER,
CenterPoint := pCircle_Center, // 圆心
EndPoint := pArc_End,
Direction := DIR_CCW, // CCW 逆时针 / CW 顺时针
Velocity := 50.0
);

起点 → 圆心的向量 + 圆心 → 终点的向量决定圆弧平面和半径. 如果起点到圆心的距离 圆心到终点的距离, 系统会报"非法圆弧"错。

全圆 (Full Circle)

单次 MoveC 只能走**小于 360°**的圆弧 (因为起终点重合时方向模糊)。完整圆用两段 MoveC:

// 圆心 (100, 100, 50), 半径 50, 起终点在 X 轴上
// 起点 (150, 100, 50) → 过 (100, 150, 50) → 终点对面 (50, 100, 50) → 回起点

mcCircle_1_of_2(
Robot := Robot1, Execute := bStart,
AuxPoint := p_top, // (100, 150, 50)
EndPoint := p_opposite, // (50, 100, 50)
Velocity := 50.0
);

IF mcCircle_1_of_2.Done THEN
mcCircle_2_of_2(
Robot := Robot1, Execute := TRUE,
AuxPoint := p_bottom, // (100, 50, 50)
EndPoint := p_start, // (150, 100, 50) 回到起点
Velocity := 50.0
);
END_IF;

或者用 MC_MoveCircularAbsoluteFullCircle (部分实现提供):

mcFullCircle(
Robot := Robot1,
Execute := TRUE,
CenterPoint := pCenter,
NormalVec := (X := 0, Y := 0, Z := 1), // 圆所在平面法向
Direction := DIR_CCW,
Turns := 1.0, // 转圈数 (支持非整数如 1.5)
Velocity := 50.0
);

连续圆弧 (Blended Arcs)

多段圆弧用 Zone (平滑半径) 连续过渡:

mcArc1(AuxPoint := p_mid1, EndPoint := p_mid2,  Zone := 5.0, Velocity := 50);
mcArc2(AuxPoint := p_mid3, EndPoint := p_mid4, Zone := 5.0, Velocity := 50);
mcArc3(AuxPoint := p_mid5, EndPoint := p_end, Zone := 0.0, Velocity := 50);

Zone > 0 时, TCP 不会精确到达每个 EndPoint, 而是在半径 Zone 的球内平滑过渡。焊接 / 涂胶连续弧必加 Zone, 否则速度波动导致焊道厚薄不匀。

姿态模式 (Orientation Mode)

沿圆弧运动时, TCP 的姿态可以有多种变化方式:

模式行为典型应用
ORI_PATH_FOLLOW姿态跟随切线方向, 工具始终"向前"焊接 (枪头总对准焊缝前方)
ORI_PATH_NORMAL姿态跟随法向, 工具垂直于圆弧平面钻孔, 铣削
ORI_KEEP_START姿态全程保持起点姿态不变搬运, 抓取
ORI_INTERPOLATE起点到终点姿态线性插值 (四元数 Slerp)通用
ORI_WRIST_FREE腕部自由, 最小化关节运动大范围移动
mcArc(
...
OriMode := ORI_PATH_FOLLOW, // 枪头跟着焊缝走
...
);

圆弧焊接示例

PROGRAM WeldCircularSeam
VAR
mcJ : MC_MoveJointAbsolute;
mcL : MC_MoveLinearAbsolute;
mcC1, mcC2 : MC_MoveCircularAbsolute;
step : INT := 0;
END_VAR

CASE step OF
0: // 接近
mcJ(Robot := Robot1, Execute := TRUE, TargetPosition := pWeld_Approach, Velocity := 200);
IF mcJ.Done THEN step := 10; END_IF;

10: // 下降到焊接起点
mcL(Robot := Robot1, Execute := TRUE, TargetPosition := pWeld_Start, Velocity := 30);
IF mcL.Done THEN
DO_Arc := TRUE; // 起弧
Wait(200);
step := 20;
END_IF;

20: // 第 1 段弧 (前半圆)
mcC1(Robot := Robot1, Execute := TRUE,
AuxPoint := pWeld_Mid1, EndPoint := pWeld_Quarter,
Velocity := 8.0, // 焊接速度 8 mm/s
OriMode := ORI_PATH_FOLLOW,
Zone := 2.0);
IF mcC1.Done THEN step := 30; END_IF;

30: // 第 2 段弧 (后半圆)
mcC2(Robot := Robot1, Execute := TRUE,
AuxPoint := pWeld_Mid2, EndPoint := pWeld_End,
Velocity := 8.0,
OriMode := ORI_PATH_FOLLOW,
Zone := 0.0);
IF mcC2.Done THEN
DO_Arc := FALSE; // 收弧
Wait(300);
step := 40;
END_IF;

40: // 退回
mcL(Robot := Robot1, Execute := TRUE, TargetPosition := pWeld_Approach, Velocity := 50);
IF mcL.Done THEN step := 0; END_IF;
END_CASE;

辅助点选取准则

辅助点 P2 的位置对圆弧精度影响极大:

位置圆弧形状精度
起点 - 辅助 - 终点 近似等距
辅助点偏向起点或终点圆弧偏
三点近似共线退化为直线 (系统报错)-
辅助点极近起点或终点病态, 半径巨大

黄金法则: 辅助点取在圆弧角度一半的位置, 即 P1 和 P3 的弧中点

参数表

参数类型单位范围默认说明
PathModeENUM-BORDER/CENTERBORDER定义方式
AuxPointROBOT_POS---辅助点 (BORDER 模式)
CenterPointROBOT_POS---圆心 (CENTER 模式)
EndPointROBOT_POS---终点
DirectionENUM-CW/CCW/SHORTESTSHORTEST圆弧方向
VelocityLREALmm/s0.1..100050切向速度
AccelerationLREALmm/s²1..10000500加速度
JerkLREALmm/s³1..1000005000跃度
OriModeENUM--PATH_FOLLOW姿态模式
ZoneLREALmm0..1000平滑半径
MinRadiusLREALmm0.1..101.0最小容许半径, 更小报错

排错清单

现象原因解决
报"三点共线不构成圆"P1/P2/P3 近似一条线检查辅助点是否偏离直线
报"圆弧半径过大"三点张角太小改用 MoveL 或调整辅助点
焊道速度波动Zone=0 相邻弧段停顿中间弧段 Zone > 2
姿态剧烈翻转OriMode 错用 ORI_INTERPOLATE 且起终点差 180°用 ORI_PATH_FOLLOW 或加中间点
圆心模式报"非法圆心"起到圆心距离 ≠ 圆心到终点用 BORDER 模式重算
圆弧方向反了Direction 错切 CW / CCW
多段弧整体路径跑偏累积误差每 5 段加一个精确点 (Zone=0) 重对齐

最佳实践

  1. 小弧用 MoveL + Zone 近似: 半径 > 1 m 的大弧, 用多段 MoveL 加 Zone 近似, 系统负担小
  2. CAD 直出点位: 圆弧焊从 CAD 焊接路径导出点位, 比手工示教精度高
  3. 速度 8~15 mm/s: 圆弧焊速度推荐范围, 过快焊道薄, 过慢烧穿
  4. 进弧 + 收弧专点: 起弧 (Arc On) 前有进弧点, 收弧 (Arc Off) 后有收弧点, 避免熔池溅落
  5. 姿态跟随切线: 焊 / 涂胶几乎都用 ORI_PATH_FOLLOW
  6. Zone 合理设置: 相邻弧 Zone = 焊枪直径的 1~2 倍, 不能 > 半径的 1/3
  7. 圆弧不跨奇异点: 弧长跨越腕奇异 → 插入关节 MoveJ 过渡

相关文档