场景:西门子 S7‑1200/1500 + PROFINET‑EtherCAT 网关 + 闭环步进(CiA402,CSP 周期同步位置模式 模式 = 8) 核心对象字典:
0x6064:Actual position 实际位置(驱动器内部编码器反馈,单位:用户单位,电子齿轮换算后)0x60F4:Following error 跟踪误差 = 目标位置 − 实际位置,失步最重要指标0x607A:Target position 目标位置(PLC 下发)
注意:
0x6064、0x60F4必须配置到TxPDO,驱动器才会周期性把数据上传 PLC;如果没映射进 PDO,PLC 读不到实时数值。
一、网关侧 PDO 映射配置
在 EtherCAT 网关软件(倍府 / 开疆等)配置该轴 TxPDO:
表格
| 对象字典 | 索引 | 子索引 | 数据类型 | 含义 |
|---|---|---|---|---|
| Actual position | 0x6064 | 0 | DINT (32 位) | 编码器实际位置 |
| Following error | 0x60F4 | 0 | DINT (32 位) | 跟踪误差 |
| Status word | 0x6041 | 0 | WORD | 状态字 |
| Actual velocity | 0x606C | 0 | DINT | 实际速度(可选) |
RxPDO(PLC 下发):0x6040 控制字、0x607A 目标位置、0x6081 速度、0x6083 加速度。
必须开启 DC 分布式时钟,总线周期建议 1ms;PDO 周期和总线周期一致,数据才是实时。 下载配置到网关;重启驱动器。
配置完成后,这些 CiA402 对象会映射成为网关 PROFINET 输入过程数据区。 举例映射:
PIW256:状态字 0x6041(WORD)
PID258:实际位置 0x6064(DINT)
PID262:跟踪误差 0x60F4(DINT)
PID:32 位;PIW:16 位。地址以你实际硬件映射为准。
二、PLC 读取数据(TIA‑Portal ST 语言示例)
把过程数据拷贝到 DB 块变量方便程序使用:
// 将PROFINET过程映像拷贝到轴DB
AxisDB.ActPosition := PID258; //0x6064 编码器实际位置
AxisDB.FollowingError := PID262; //0x60F4 跟踪误差
AxisDB.StatusWord := PIW256; //0x6041 状态字
AxisDB.TargetPosition := PQD258; //0x607A PLC下发目标位置
跟踪误差含义
FollowingError = TargetPosition − ActualPosition
运动过程:会有动态偏差,允许短时波动;
定位完成静止状态:跟踪误差应该接近 0;
如果静止时跟踪误差持续很大,代表负载过载、堵转、真实失步。
区分:动态误差 vs 静态误差
运动中:电机加减速阶段,跟踪误差允许几十~几百个单位,属于正常;
定位完成(状态字 bit10=1,目标到达)之后,跟踪误差必须趋近 0;如果此时误差依然很大,判定失步故障。
三、失步检测逻辑(完整 ST 示例)
两个判断条件同时做:①定位完成后跟踪误差超过阈值;②运动过程跟踪误差超限。 阈值需要现场整定,和机械负载、电子齿轮单位相关。 示例:
FollowingErrorLimit := 200(根据你的机械单位修改)
//失步检测
VAR
AxisDB : AXIS_DB;
FollowingErrorLimit : DINT := 200; //跟踪误差报警阈值,现场调试修改
MotionDone : BOOL; //定位完成 bit10 of StatusWord
FollowingErrorAlarm : BOOL; //失步报警
END_VAR
//状态字bit10:Target Reached 目标到达
MotionDone := ( (AxisDB.StatusWord AND 16#0400) <> 0 );
//失步报警逻辑
IF MotionDone THEN
//定位完成静止状态,跟踪误差超过阈值 → 失步
FollowingErrorAlarm := ABS(AxisDB.FollowingError) > FollowingErrorLimit;
ELSE
//运动过程中也可以监控,运动时阈值可以放大,防止正常动态偏差误报警
FollowingErrorAlarm := ABS(AxisDB.FollowingError) > (FollowingErrorLimit * 5);
END_IF;
//失步报警动作:触发驱动器快速停机,切断使能,锁存报警
IF FollowingErrorAlarm THEN
//CiA402控制字写0x0B 快速停机
PQW256 := 16#0B;
AxisDB.AlarmLatch := TRUE;
END_IF;
驱动器本身也有跟踪误差报警参数:驱动器参数设置硬件跟踪误差报警门限。
当 0x60F4 超过驱动器内部阈值,驱动器自己报故障,状态字 bit3 故障位置 1。
推荐:驱动器硬件报警 + PLC 软件报警双重防护。驱动器硬件报警优先,响应速度更快。
四、关键注意点
0x60F4 跟踪误差必须映射进 TxPDO!如果只是 SDO 读写 0x60F4,是异步读取,周期慢,不能做实时失步检测;SDO 只能调试看数据,不能用于控制逻辑。
单位统一问题 跟踪误差
0x60F4单位和0x6064实际位置、0x607A目标位置完全一致,是用户单位,由驱动器电子齿轮比定义。
不要混淆编码器原始脉冲和用户单位,阈值设置错会一直误报警或者不报警。
区分故障现象
运动时跟踪误差大,停止后归零:属于正常动态跟随偏差,不是失步;
停止之后跟踪误差依然很大:真实丢步、机械打滑、负载过载;
跟踪误差剧烈跳变:编码器干扰、编码器线接触不良。
原点回归问题 闭环步进上电驱动器记住编码器位置,但机械原点丢失;上电必须执行 CiA402 回零;不能直接使用上电的 0x6064 位置当作机械零点。
怎么验证失步检测是否有效? 人为给机械增加负载(手抱紧输出轴),电机受阻,观察:
FollowingError数值明显上涨;超过阈值触发报警;电机停机。
五、如果没有 EtherCAT,脉冲型闭环步进如何做失步检测
脉冲方式:PLC 发脉冲,编码器接入 PLC 高速计数模块。 逻辑:
PLC 内部虚拟目标位置;
高速计数器读取编码器实际位置;
偏差 = ABS (目标位置‑编码器实际位置);
缺点:数据是 PLC 侧采集,有扫描周期延迟;没有 EtherCAT 驱动器硬件检测响应快。
六、常用调试手段
网关软件在线监视 PDO 变量,实时看
0x6064、0x60F4;PLC 在线监控 DB 块变量,运动、停止分别观察跟踪误差变化;
逐步调小报警阈值,找到合理值,兼顾不误报、不漏报。

