EN

西门子LAxesGrpCtrl抓放库上手

屯蒙科技公众号
1789487539
hits: 3

sPTP同步点对点+平滑半径,PTO脉冲接V90/S200的直角坐标抓放方案
先说重点:这个库在 S7-1200 G2 上是个"补位"方案


这个库干的事一句话能说清:让直角坐标(笛卡尔)机械手的多个伺服轴,按预先定义的空间路径做同步点对点运动(synchronous Point-To-Point,sPTP),典型用途就是 Pick & Place 抓放。


但要特别注意 V2.0 相对老 S7-1200 时代的定位变化:


• S7-1200 G2 已经原生支持运动学,通过工艺对象 TO_Kinematics(底层用 TO_PositioningAxis / TO_SynchronousAxis)就能协调多轴。走 PROFINET 或模拟量接驱动,直接用原生 TO_Kinematics 即可;

• 唯独一种情况原生方案用不了:通过板载数字量输出做脉冲给定(PTO)接驱动。因为 G2 的 TO_PositioningAxis / TO_SynchronousAxis 不能配合信号板、信号模块的脉冲输出,只有 PTO 专用的 TO_PositioningAxis_PTO 可以;

• LAxesGrpCtrl V2.0 被移植到 G2,就是为了补上这一个缺口——PTO 脉冲接 V90 PTI / S200 PTI 时,照样能做多轴协调抓放


所以选型逻辑很直白:用总线驱动,上原生 TO_Kinematics;用板载 PTO 脉冲,才需要这个库。


sPTP 到底是怎么"同步"的


库内部并不做插补器,每个轴底层调用的还是大家熟悉的运动控制指令 MC_MoveAbsolute。协调靠的是动力学再分配:


1. 先算出路径段里动作最慢的那根轴走完全程需要的时间;

2. 再把其余轴的速度、加速度等动力学值按比例压低,让所有轴同时启动、尽量同时到位


这样 TCP(工具中心点)从空间点 P1 到 P2 的过程,就是多轴"凑齐时间"的协调运动。


库提供两种同步模式,由 syncDynPhases 参数切换:


syncDynPhases = False(默认):各轴的加速、匀速、制动阶段不强制对齐,每轴相位可以不同。协调到位即可,执行速度更快;

syncDynPhases = True:各轴加减速、匀速阶段完全同步、耗时相同。两点之间的轨迹更接近一条直线,重复一致性更好,但执行时间略长。


抓放节拍优先选前者,对轨迹一致性有要求选后者。


中间点不用停:平滑半径(Blending Radius)


Pick & Place 的诉求是尽快从取料点 P1 到放料点 P4,中间的 P2、P3 往往只是避让障碍的"过路点",逐个精确停到位既没必要又拖节拍。


库允许给中间点定义一个平滑半径:TCP 一旦进入该点周围的半径球,就提前向下一个点过渡,不再精确经过该点。半径越大、过渡越圆滑,但实际轨迹也越"不精确"——它取决于当时编程的动力学值,不同速度下轨迹可能有差异。


两个使用细节:


• 平滑半径按"该段各轴最短行程的百分比"设定,用户常量里有百分比上限(默认 50%),超了会被自动截断,且没有任何接口反馈,需要自己把半径留够;

• 协调计算在 OB1 主循环里完成,扫描周期负载会影响进入平滑半径的判定时机,路径速度越快、CPU 负载越高,TCP 切入半径的深度越不一致。半径要留足余量。


另外必须认清边界:sPTP 不是轨迹精确的路径运动。它追求的是快和流畅,不能用于涂胶、焊接这类要求沿指定曲线精确行走的工序。


库里有什么:2 个 FB + 3 个 DB


Master copies 里分三个文件夹:LAxesGrpCtrl_Types(PLC 数据类型)、LAxesGrpCtrl_Tags(用户常量表)、LAxesGrpCtrl_Blocks(程序块)。核心对象如下:


对象
名称
作用
FB
LAxesGrpCtrl_Main
主控块,在 OB1 调用一次即可。execute 上升沿启动后,自动顺序走完 PathDefinition 里的全部插补点;支持 stop、interrupt(暂停后可再触发 execute 恢复)、reset,以及路径间平滑 pathTransition、全局动力学系数 globalDynamicsFactor
FB
LAxesGrpCtrl_ExecutePosCmd
单点定位块。支持绝对/相对定位,可用 usedAxes 只让某一根轴动作——回零前把各轴依次挪到安全位就是靠它。正常跑路径不用直接调它
DB
KinematicsAxes
轴数组。在 OB100 StartUp 里把工艺对象依次填入 kinematicsAxes[0]=X、[1]=Y、[2]=Z
DB
PathDefinition
路径数组。每条路径含路径名 pathName、各轴动力学 axesDynamics、插补点 points(点类型、坐标、该点动力学系数、平滑半径)
DB
PointTable
预置点表。可由 HMI 示教自动写入;路径中点类型填负值(如 -5)即引用点表索引 5,便于多条路径集中共用、统一修改点位


插补点类型 pointType 有四种取值:0 = 该点无效跳过;1 = 绝对目标位置;2 = 相对当前 TCP 的增量;负值 = 引用点表。


6 个用户常量:先设对,再编译


库容量全部由用户常量决定,改完必须完整编译软件才生效。为省 CPU 存储,按需设置、别贪大:


LAXESGRPCTRL_LAST_NUMBER_OF_AXES:轴数减 1,三轴系统填 2;

LAXESGRPCTRL_LAST_NUMBER_OF_PATH_DEFINITION_POINTS:单条路径插补点的最大索引,5 表示可有 6 个点,至少填 1(起点+终点);

LAXESGRPCTRL_LAST_NUMBER_OF_PATH_DEFINITIONS:可存路径条数减 1,2 表示 3 条路径;

LAXESGRPCTRL_SIZE_OF_POINT_TABLE:点表点数;

LAXESGRPCTRL_MAX_BLENDING_VALUE:平滑半径占段长百分比上限,默认 50;

LAXESGRPCTRL_LENGTH_OF_NAME:路径名字符长度,默认 10。


上手流程(TIA Portal V21)


1. 下载库 ZIP 解压,在"全局库"中打开;

2. 依次把 Types、Tags、Blocks 三个文件夹拖入用户项目对应目录;

3. 在 PLC 变量的"用户常量"页设好上述 6 个常量,完整编译软件,生成对应 DB;

4. 在 Motion Control → PTO 下为每根轴新建工艺对象 TO_PositioningAxis_PTO:配脉冲发生器与脉冲形式(V90 支持 A/B 相脉冲、脉冲+方向;S200 还支持正转脉冲+反转脉冲)、机械参数(丝杠导程)、软硬限位、最大动力学、急停减速度、主动回零;

5. 在 OB100 里把轴对象写入 KinematicsAxes 数组;

6. 在 OB1 调用 LAxesGrpCtrl_Main 并关联各 DB;

7. 在 PathDefinition 里填路径:路径名、各轴速度/加减速度、各插补点坐标与平滑半径;

8. 投运顺序:MC_POWER 使能 → MC_RESET 确认故障 → MC_HOME 回零(建议逐轴依次回零防碰撞;用绝对值编码器只需标定一次)→ execute 上升沿启动路径。


启动前提醒一句:触发后 TCP 会先直接走向路径第一个有效点,务必先确认起点附近无碰撞,必要时先用单动方式把 TCP 放到安全位。


动力学设置的三个坑


Jerk(加加速度)不参与库内部路径计算。工艺对象里的 jerk 限制应禁用、设为不限或给一个很大的值,否则结果不可预期;

• 路径里动力学值填负数,表示沿用工艺对象里设定的最大值;填得超过 TO 上限会被自动限制;

• PTO 有频率下限:给定速度对应的脉冲频率若低于 TO 里设的启动/停止频率,轴根本不动,协调路径就会被带偏。G2 板载输出最高 100 kHz(Aa.0~Aa.3,其余点 20 kHz),信号板 100 kHz,5V 信号板可达 200 kHz。


另外,库里部分内部 FC 要求非优化块访问,如果被改成优化访问会报区域长度错误(Area length error),保持默认即可。


故障排查:常见状态字与错误码


块的 status 输出遵循 16#0000~7FFF 为状态、16#8000 以上为错误的约定,现场常用的几个:


代码
含义
处理
16#7000
块当前未执行
正常待机状态
16#7001 / 16#7002
首次初始化 / 初始化后正常运行
无需处理
16#7004
路径运动被 interrupt 输入暂停
execute 再来一个上升沿即可恢复
16#7010
轴上的运动命令被其他运动控制功能取消
检查用户程序里是否还有别的指令在操作同一 TO
16#8200
至少一根轴未使能
确认轴上无挂起故障,重新 Enable
16#8203
指定索引超出点表范围
检查 pointType 负索引与点表容量
16#8204
至少一根轴未回零
执行回零;检查驱动与编码器通信
16#8900
轴动力学无法计算
检查路径点坐标、平滑半径和动力学值是否合理
16#8902
动力学值设置不当
核对速度、加减速度设定


四类运动学方案怎么选


西门子官方在该条目页给出了 S7-1200/1500 家族四个抓放/运动学方案的对照,选型时可以直接对着看:


对比项
LAxesGrpCtrl V1.0.1
LAxesGrpCtrl V2.0.0
Kinematics Operate
Kinematics Integrator
适用控制器
S7-1200
S7-1200 G2
S7-1500 / S7-1500T
S7-1500T
适用驱动
V90 PTI/PN、S200 全系、S210(PROFIdrive 有限制)
仅 PTI 脉冲驱动(V90 PTI、S200 PTI)
V90 PN、S210、S120
V90 PN、S210、S120
支持运动学
直角坐标门架
直角坐标门架
直角坐标门架
门架、Delta、SCARA、关节臂、Tripod、圆柱、自定义等
sPTP 同步点对点
支持
支持
支持
支持
HMI 即插即用
不支持
不支持
支持
支持
IRT 等时实时通信
S7-1200 不支持
用 PTO/PTI,不涉及
支持
支持
直线 / 圆弧运动
不支持
不支持
不支持
支持
输送带跟踪
不支持
不支持
不支持
支持


一句话总结:小型 G2 + 脉冲驱动做直角坐标抓放,用本篇的 LAxesGrpCtrl;1500 平台要 HMI 模板和更完整功能看 Kinematics Operate;要多构型机器人、直线圆弧、输送带跟踪,得上 S7-1500T + Kinematics Integrator。



写在最后


S7-1200 G2 这一代把运动学能力收进了原生 TO_Kinematics,LAxesGrpCtrl 的舞台确实变小了——但只要现场还有"经济型 G2 + 板载 PTO + V90/S200 PTI 脉冲驱动"这种讲究成本的抓放设备,它就是官方给的现成答案:不用自己写多轴时间分配,不用自己处理平滑过渡,填路径表、调一个 FB 就能跑。


用的时候记住三条边界:只认直角坐标、只做抓放不做精确轨迹、PTO 频率和扫描周期要留余量。剩下的,照着程序示例改就行。