返回主站|会员中心|保存桌面

西门子(SIEMENS)服务商    

框架断路器、塑壳断路器、隔离开关、软启动、变频器、电机 、PLC、触摸屏

联系方式
  • 联系人:方经理
  • 电话:13073017555
  • 邮件:gzws26@126.com
新闻分类
  • 暂无分类
站内搜索
 
首页 > 新闻中心 > 如何读取编码器实际位置、跟踪误差,检测失步?
新闻中心
如何读取编码器实际位置、跟踪误差,检测失步?
发布时间:2026-08-26        浏览次数:3        返回列表

场景:西门子 S7‑1200/1500 + PROFINET‑EtherCAT 网关 + 闭环步进(CiA402,CSP 周期同步位置模式 模式 = 8) 核心对象字典:

  1. 0x6064Actual position 实际位置(驱动器内部编码器反馈,单位:用户单位,电子齿轮换算后)

  2. 0x60F4Following error 跟踪误差 = 目标位置 − 实际位置,失步最重要指标

  3. 0x607A:Target position 目标位置(PLC 下发)

注意:0x60640x60F4必须配置到TxPDO,驱动器才会周期性把数据上传 PLC;如果没映射进 PDO,PLC 读不到实时数值。

一、网关侧 PDO 映射配置

在 EtherCAT 网关软件(倍府 / 开疆等)配置该轴 TxPDO:

表格

对象字典索引子索引数据类型含义
Actual position0x60640DINT (32 位)编码器实际位置
Following error0x60F40DINT (32 位)跟踪误差
Status word0x60410WORD状态字
Actual velocity0x606C0DINT实际速度(可选)

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 静态误差

  1. 运动中:电机加减速阶段,跟踪误差允许几十~几百个单位,属于正常;

  2. 定位完成(状态字 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 软件报警双重防护。驱动器硬件报警优先,响应速度更快。

四、关键注意点

  1. 0x60F4 跟踪误差必须映射进 TxPDO!如果只是 SDO 读写 0x60F4,是异步读取,周期慢,不能做实时失步检测;SDO 只能调试看数据,不能用于控制逻辑。

  2. 单位统一问题 跟踪误差0x60F4单位和0x6064实际位置、0x607A目标位置完全一致,是用户单位,由驱动器电子齿轮比定义。

不要混淆编码器原始脉冲和用户单位,阈值设置错会一直误报警或者不报警。

  1. 区分故障现象

  • 运动时跟踪误差大,停止后归零:属于正常动态跟随偏差,不是失步;

  • 停止之后跟踪误差依然很大:真实丢步、机械打滑、负载过载;

  • 跟踪误差剧烈跳变:编码器干扰、编码器线接触不良。

  1. 原点回归问题 闭环步进上电驱动器记住编码器位置,但机械原点丢失;上电必须执行 CiA402 回零;不能直接使用上电的 0x6064 位置当作机械零点。

  2. 怎么验证失步检测是否有效? 人为给机械增加负载(手抱紧输出轴),电机受阻,观察:

  3. FollowingError数值明显上涨;

  4. 超过阈值触发报警;电机停机。

五、如果没有 EtherCAT,脉冲型闭环步进如何做失步检测

脉冲方式:PLC 发脉冲,编码器接入 PLC 高速计数模块。 逻辑:

  • PLC 内部虚拟目标位置;

  • 高速计数器读取编码器实际位置;

  • 偏差 = ABS (目标位置‑编码器实际位置);

缺点:数据是 PLC 侧采集,有扫描周期延迟;没有 EtherCAT 驱动器硬件检测响应快。

六、常用调试手段

  1. 网关软件在线监视 PDO 变量,实时看 0x60640x60F4

  2. PLC 在线监控 DB 块变量,运动、停止分别观察跟踪误差变化;

  3. 逐步调小报警阈值,找到合理值,兼顾不误报、不漏报。

收缩
  • QQ咨询

  • 电话咨询

  • 13073017555
  • 添加微信客服