点位管理
点位是机器人程序的基础数据。在 IDE 的 点位管理面板 中可以查看、编辑、导入导出所有点位。
查看点位
点位管理面板以列表形式显示所有点位:
| 列 | 说明 |
|---|---|
| 名称 | 点位名称(如 Home、Pick1) |
| 类型 | 关节坐标 / 笛卡尔坐标 |
| J1~J6 | 各关节角度值 (度) |
| X/Y/Z | TCP 位置 (mm) |
| Rx/Ry/Rz | TCP 姿态 (度) |
创建点位
除了通过示教器记录外,还可以手动创建:
- 点击 新建点位
- 输入名称和坐标值
- 点击 确定
从其他系统迁移
如果已有坐标数据(如从其他品牌机器人导出),可以手动输入坐标值创建点位,无需逐一示教。
编辑点位
双击点位可以修改名称和坐标。也可以:
- 移动到点位:机器人自动运动到该点位(低速),确认位置是否正确
- 更新为当前位置:将机器人当前位置覆盖到该点位
分组管理
建议按功能对点位进行分组:
Home/
Home
取料工位/
Pick_Above
Pick
放料工位/
Place_Above
Place
导入导出
导出
点击 导出 按钮,支持 CSV 格式:
名称,J1,J2,J3,J4,J5,J6
Home,0.0,0.0,0.0,0.0,0.0,0.0
Pick,45.2,-30.5,60.0,0.0,-29.5,45.2
Place,-45.2,-30.5,60.0,0.0,-29.5,-45.2
导入
点击 导入 选择 CSV 文件,系统自动匹配列名并导入。同名点位会提示是否覆盖。
撤销与恢复
所有点位编辑操作支持 撤销/恢复(最多 50 步)。
- Ctrl+Z — 撤销
- Ctrl+Y — 恢复
点位数据结构
关节坐标点位 (JointPos)
TYPE ROBOT_JOINT :
STRUCT
J1, J2, J3, J4, J5, J6 : LREAL; // 关节角度 ° 或 mm (棱柱关节)
J7 : LREAL; // 7 轴冗余机器人用
E1, E2, E3 : LREAL; // 外部轴 (变位机)
ToolId : UINT; // 绑定工具
UserFrameId : UINT; // 绑定工件
Meta : POINT_META; // 元数据
END_STRUCT
END_TYPE
笛卡尔坐标点位 (CartesianPos)
TYPE ROBOT_POS :
STRUCT
X, Y, Z : LREAL; // 位置 mm, 相对 UserFrame
Rx, Ry, Rz : LREAL; // 姿态 ° (RPY XYZ)
// 或用四元数:
Qw, Qx, Qy, Qz : LREAL; // 四元数 (精度更高, 无万向锁)
Config : USINT; // 机器人构型标志位 (肘上/肘下, 腕上/腕下)
Turns[6] : SINT; // 每轴转数 (处理 ±360°)
ToolId : UINT;
UserFrameId : UINT;
Meta : POINT_META;
END_STRUCT
END_TYPE
点位元数据 (Meta)
TYPE POINT_META :
STRUCT
Name : STRING(64);
Group : STRING(64);
Author : STRING(32); // 最后修改人
CreatedAt : DT;
ModifiedAt : DT;
Comment : STRING(256);
RefCount : UDINT; // 被程序引用次数
LockStatus : BOOL; // 是否锁定不可改
END_STRUCT
END_TYPE
关节点位 vs 笛卡尔点位
| 类型 | 优点 | 缺点 | 适用 |
|---|---|---|---|
| 关节点位 | 精确可重现, 不受工件 / 工具影响 | 换工具 / 工件后全失效 | Home / 折叠姿态 |
| 笛卡尔点位 | 换工具 / 工件自动偏移 | 需选机器人构型 | 工作点, 绝大多数 |
推荐做法:
Home/Trans过渡点: 关节点位Pick/Place/Weld N: 笛卡尔点位 (相对工件)
构型标志 (Config / Turn)
同一 TCP 位姿可能有多个关节解 (通常 8 个, 6 轴机器人). 构型标志 Config 3 位指定:
- 位 0: 肘上 (0) / 肘下 (1)
- 位 1: 腕上 (0) / 腕下 (1)
- 位 2: 肩前 (0) / 肩后 (1)
Turn 数组记录各轴超 ±180° 的转数 (±2 表示转了 720°), 确保回放姿态严格一致。
记录笛卡尔点位时, 系统自动保存 Config + Turn, 回放时机器人选择相同解, 避免突然换构型导致关节大角度回转。
点位修改记录 (审计)
每次编辑保存自动产生记录:
| 时间 | 用户 | 点位 | 修改前 | 修改后 |
|---|---|---|---|---|
| 2026-04-18 14:32 | 张三 | Pick_Station_A | (300, 0, 500) | (300.5, 0.1, 500.2) |
| 2026-04-18 15:10 | 李四 | Weld_Start | - | 新建 (800, 200, 600) |
记录保留 3 年, 用于责任追溯和回滚.
点位锁定
生产线调试完成后, 锁定关键点位防止误改:
- 点位管理 → 右键点位 → 锁定
- 锁定后点位不可编辑, 除非解锁 (需权限)
- 程序中引用不受影响
批量操作
选中多个点位
- Ctrl+点击: 逐个选
- Shift+点击: 范围选
- Ctrl+A: 全选
批量功能
- 批量重命名: 按规则替换字段 (如
Pick_*→ProductA_Pick_*) - 批量平移: 所有选中点位在某方向偏移 N mm
- 批量旋转: 绕某点旋转 N°
- 批量切换工具 / 工件号: 改 ToolId / UserFrameId
- 批量导出: 导出选中点为 CSV
点位引用追踪
在 IDE 引用查找 (Ctrl+F12) 功能:
点位 `Pick_Station_A` 被以下程序引用:
- MainProgram 第 42 行
- PickPlaceFB 第 15 行
- TestRoutine 第 8 行
总引用次数: 3
删除被引用的点位会提示确认, 避免运行时报错。
导入导出进阶
CSV 格式规范
Name,Type,J1,J2,J3,J4,J5,J6,X,Y,Z,Rx,Ry,Rz,ToolId,UserFrameId,Config,Comment
Home,Joint,0,-90,90,0,-90,0,,,,,,0,0,0,折叠姿态
Pick_A,Cartesian,,,,,,,300.5,0.1,500.2,0,180,0,1,1,5,取料位 A
JSON 格式
{
"version": "1.0",
"points": [
{
"name": "Home",
"type": "joint",
"joint": [0, -90, 90, 0, -90, 0],
"toolId": 0,
"userFrameId": 0,
"comment": "折叠姿态"
},
{
"name": "Pick_A",
"type": "cartesian",
"position": [300.5, 0.1, 500.2],
"orientation_rpy": [0, 180, 0],
"toolId": 1,
"userFrameId": 1,
"config": 5,
"comment": "取料位 A"
}
]
}
导入冲突策略
导入时同名点位处理:
- 覆盖: 直接替换 (危险, 旧值丢失)
- 跳过: 保留现有
- 改名: 自动加后缀
_imported - 提示: 每条都问 (数量大时慢)
推荐: 改名, 后续人工审查合并。
程序中的点位引用
直接按名引用
MoveJ(TargetName := 'Home', Velocity := 100);
按变量引用
VAR
pWork : ROBOT_POS;
END_VAR
pWork := GetPoint('Pick_Station_A');
MoveL(TargetPosition := pWork, Velocity := 50);
按数组引用 (码垛)
VAR
aPoints : ARRAY[1..50] OF ROBOT_POS;
i : INT;
END_VAR
LoadPointGroup(Group := 'Weld_Seam_Group', Points := ADR(aPoints));
FOR i := 1 TO 50 DO
MoveL(TargetPosition := aPoints[i], Velocity := 50);
END_FOR;
参数表
| 参数 | 类型 | 说明 |
|---|---|---|
| PointCount | UDINT | 项目内点位总数 (上限 10000) |
| GroupCount | UDINT | 分组数 (上限 500) |
| AutoSaveInterval | UDINT | 自动保存秒数 (默认 300) |
| UndoDepth | UDINT | 撤销栈深度 (默认 50) |
| LockRequirePassword | BOOL | 锁 / 解锁是否要密码 |
| AuditLogRetention | UDINT | 审计日志保留天数 (默认 1095 = 3 年) |
排错清单
| 现象 | 原因 | 解决 |
|---|---|---|
| 导入 CSV 失败 | 列名不匹配 | 用标准模板导出后编辑 |
| 点位引用但运行报 "Point not found" | 点位被删但程序没更新 | 重新关联或用新名 |
| 笛卡尔点位换工件后位置不对 | UserFrameId 绑定错 | 检查点位属性 |
| 关节点位换工具后机器人动作变 | 关节点位不受工具影响, 是程序逻辑变 | 检查逻辑 |
| 批量偏移后姿态也变了 | 偏移时勾了"连姿态旋转" | 只选"平移" |
| 导出文件中文乱码 | 编码不是 UTF-8 | 导出时选 UTF-8 with BOM |
最佳实践
- 命名规范:
<区域>_<功能>_<序号>, 如StnA_Weld_01 - 分组管理: 按工位 / 工序分组, 方便批量操作
- 生产点位锁定: 调试通过就锁, 防误改
- 版本化备份: 每周导出 CSV / JSON 提交 git
- 批量生成用脚本: 码垛 / 网格 5 个以上点, 脚本生成比手工快
- 点位不重复: 看到多个点位坐标 < 1 mm, 合并一个
- 审计必启用: 多人协作必须开启审计, 责任清晰
- 不在程序里直接写坐标: 所有坐标进点位库, 改一处生效全程序