SINUMERIK 828D 报警 2000/2001 怎么解决?PLC 生命信号(Sign of Life)监测原理与 MD10100/MD10120 参数设置

西门子 SINUMERIK 828D 一开机就弹报警 2000「PLC 生命信号监控」,NC 一启动就被拉停——很多电工第一反应是按复位,结果越按越糊涂。这条报警其实在用大白话告诉你一件事:NCK 收不到 PLC 的”心跳”了。它是控制系统刻意设计的安全停止,不是随机故障,根源几乎总落在 PLC 用户程序的三种情况之一。本文讲清 2000(以及它的”兄弟”2001)到底是什么、NCK 怎么监控 PLC、两个关键参数 MD10100 / MD10120 怎么理解,以及一条从报警列表查到根因、而不是盲目改参数的现场诊断路径。

口径说明:文中的定义、参数名与”死循环时 ISTACK 为空”的行为,来自西门子官方《SINUMERIK 828D 报警诊断手册》(V4.7 / V14 / V15 多版交叉核对);只引用参数号与参考值,不转抄手册正文。具体以随机床软件版本的手册为准。

一、报警 2000 到底是什么:10ms 心跳计数器

所谓”生命信号(Sign of Life)”,是内部 NC/PLC 接口上的一个计数器读数。PLC 用它的 10ms 时间报警(时间中断)例程,每 10ms 把这个计数器加一;NCK 则在自己的循环里检查这个读数有没有变化。如果在 MD10100 $MN_PLC_CYCLIC_TIMEOUT(参考值 100ms)规定的时间窗内计数器没有走动,NCK 就判定 PLC 循环已停止运转,触发报警 2000。

随之而来的反应是刻意设计的安全动作:

  • NC 未就绪(not ready)
  • 通道未就绪
  • 该通道 NC 启动被禁止
  • 报警时 NC 停止
  • 接口信号置位、报警显示

换句话说:控制系统确认不了 PLC 活着,就绝不允许你跑加工程序——因为防护门、润滑、冷却、门锁这一整套安全联锁,全靠 PLC 在维护。

NCK 监控 PLC 原理:PLC 每 10ms 给接口计数器加一,NCK 在 MD10100 时间窗内检查;计数器停走即触发报警 2000

二、2000 与 2001 的先后关系:开机先 2001 再 2000 的典型链

这两个报警是”兄弟”,冷启动故障时经常成串出现:

报警 2000 与 2001 对照

报警含义超时来源触发时机
2001 PLC 未启动上电后 PLC 一次生命信号都没发过MD10120 $MN_PLC_RUNNINGUP_TIMEOUT(默认约 1s)启动过程中,PLC 尚未完成第一个 OB1 循环
2000 PLC 生命信号监控PLC 已启动,但循环运行中心跳停止MD10100 $MN_PLC_CYCLIC_TIMEOUT(参考值 100ms)PLC 正常运行后心跳中断

典型的冷启动链是:上电 → 先报 2001(PLC 在启动监视窗内一次信号都没发)→ PLC 起来后又卡死或死循环 → 跟着报 2000。而一台本来正常运行的机床,PLC 被停(调试开关、编程工具按了 Stop、或某条 PLC 报警把 CPU 停了)后,通常直接报 2000、没有 2001——因为 PLC 早就启动完成了。

广告

现场判读:冷启动见到 2001,优先怀疑第一个 OB1 循环太长或启动段里有死循环;运行中的机床突然报 2000,优先怀疑死循环、STOP 或循环里的长时间阻塞操作。

三、三个根因:STOP / 死循环 / 循环时间超窗

报警 2000 不是单一故障,它是 NCK 在报告”心跳丢了”。心跳丢失只有三种原因:

PLC 心跳停止的三种方式

#根因扫描周期发生了什么典型诱因
1PLC 处于 STOP扫描停摆,计数器不再累加调试开关在 STOP 位、编程工具按了 Stop、或某条 PLC 报警停了 CPU
2用户程序死循环扫描回不到 10ms 时间中断例程无出口的 WHILE/FOR 循环、子程序自己调用自己
3循环时间超窗扫描在跑,但 10ms 例程被拖过了 MD10100 窗口高速率 OB 里塞了重活、阻塞式通信等待、首循环过载

关键区别在根因 2 与根因 1 的表现不同:PLC 进 STOP 时会写一条 ISTACK(中断堆栈)记录,说明自己为什么停;而死循环时 PLC 从未正式停下——它只是卡住了——所以 ISTACK 里什么都没有。这是现场最容易误判的一点(见第五节)。

报警 2000 三大根因:PLC STOP、用户程序死循环、循环时间超过 MD10100 窗口

四、两个关键参数:MD10100 与 MD10120

两者都是 NCK 侧机床数据,决定 NCK 愿意等多久:

生命信号监控参数

参数名称管什么参考/默认值
MD10100$MN_PLC_CYCLIC_TIMEOUT循环运行期间 NCK 等计数器变化的最长时间(报警 2000)参考值 100ms
MD10120$MN_PLC_RUNNINGUP_TIMEOUT上电后 PLC 发出首个生命信号的最长时间(报警 2001)默认约 1s

诊断时怎么用:

  • MD10100:确认它是不是合理值、有没有被人调得过小。西门子给 828D 的参考值是 100ms;如果有人为了”保险”设成几毫秒,正常的 PLC 抖动都会触发 2000——这是自己制造的故障。
  • MD10120:只在冷启动时起作用。它必须盖得住这台机床第一个 OB1 循环的耗时。如果 PLC 第一个扫描周期要干重活(回零序列、长初始化),首循环超过 1s 就会报 2001。

重要——这两个参数不是修复手段,它们只是超时门限。改大只是把窗口放宽,解决不了”心跳为什么停”。放宽的代价见第七节。

五、现场诊断流程:从报警列表到根因

自上而下查,目标是在动程序之前先分清 STOP / 死循环 / 超载:

  1. 带时间戳截取报警列表:Menu Select → 诊断 → 报警信息。记录 2000 出现的时间及”邻居”(2001、电源、驱动、2100–2140 电池/电源报警)——先后顺序能还原事件链。
  2. 查 PLC 是 RUN 还是 STOP:PLC 在 STOP,心跳就断在扫描停摆——根因 1。查谁停的它:调试开关、编程工具、还是某条 PLC 报警(机床厂自定义报警可参考840D/828D PLC 用户报警排查的 DB2 反查思路)。
  3. 读循环时间:PLC 在 RUN 但循环时间接近或超过 MD10100,就是根因 3(超载)——把重活挪出高速率 OB。
  4. 打开 ISTACK——并且正确理解”空的 ISTACK”:PLC 若 STOP 了,ISTACK 会显示停止原因;但若系统是卡死在循环里而非正式停止,ISTACK 是空的。2000 伴随空 ISTACK 不代表”没故障”——它指向死循环(根因 2)。此时去看 10ms 时间中断例程附近、接口计数器加一那几行的时间关键代码。
  5. 关联电源/驱动报警:5V/24V 欠压、风扇、温度类报警可能在瞬态中卡住 PLC 或触发看门狗;别只治症状漏了电源。
现场诊断路径:报警时间戳→RUN/STOP 判定→循环时间对比 MD10100→ISTACK(空=死循环而非无故障)→关联电源类报警

六、梯形图侧根因:时间中断里塞了长循环/阻塞等待

负责累加心跳计数器的 10ms 时间报警例程,必须每个周期都快速、无条件地执行完。两种写法必出事:

  • 阻塞式循环:出口条件永远不满足的 WHILE/FOR,或者子程序递归调用自己,把扫描困住,10ms 例程永远轮不到执行。
  • 高速率 OB 里的长等待:把阻塞式通信等待(紧轮询驱动或现场设备)或重量级诊断程序放进时间报警 OB,把计数器累加拖过 MD10100 窗口。

修法在程序里,不在参数里:把耗时和等待型任务挪出时间关键 OB;给每个循环加真实出口和看门狗计数;把心跳累加固定为 10ms 例程的第一句、无条件执行的代码。

广告

经验法则:计数器累加就几行代码,永远执行,绝不放在任何条件或等待之后。

七、参数改大能解决吗:能,但代价是失去安全保护窗口

把 MD10100 从 100ms 往上调,确实能让”因时间太紧”触发的 2000 消失。但要明白你放弃了什么:

  • MD10100 是安全窗口——NCK 多快能发现 PLC 死了。放宽到几秒,PLC 停摆后控制系统还能”继续运行”这么久:防护门、润滑联锁、门锁逻辑全部无人维护,而轴运动可能仍被允许。
  • MD10120 同理保护的是启动阶段:设太长,一个永远起不来的 PLC 也能让 NCK 继续往下走。
  • 西门子自己的建议是:MD10100 应在盖住最坏情况抖动的前提下尽量收紧,以 100ms 为参考;只有实测循环时间并做安全评估后才允许放宽。

结论:先实测循环时间、确认原因是真实抖动(而不是被你藏起来的死循环或 STOP),放宽参数才是正当操作。

八、复位与再启动的正确顺序

手册对 2000 和 2001 给出的处理方式是同一个:控制系统断电再上电(OFF–ON)。不存在”按一下 RESET 就完事”——也不应该有,因为根因还在。

正确顺序:

  1. 按第五节分清 STOP / 死循环 / 超载。
  2. PLC 在 STOP:排除原因(调试开关、编程工具、PLC 报警),恢复 RUN,确认心跳恢复。
  3. 死循环或超载:修程序(去掉阻塞循环/把重活挪出时间关键 OB),下载后断电重启。
  4. 重启后打开 诊断 → 报警信息,确认 2000/2001 不再复现、NC 就绪、NC 启动允许。
  5. 只有实测循环并留有书面依据后,才调整 MD10100 / MD10120——永远不是第一步。
正确复位顺序:先诊断 STOP/死循环/超载→修 PLC 程序→断电重启→确认不复现;改参数永远排最后

FAQ

828D 报警 2000 和 2001 有什么区别?

2001「PLC 未启动」发生在启动阶段:上电后 PLC 在 MD10120 $MN_PLC_RUNNINGUP_TIMEOUT(默认约 1 秒)内一次生命信号都没发过。2000「PLC 生命信号监控」发生在循环运行中:PLC 已经启动,但 10ms 心跳计数器在 MD10100 $MN_PLC_CYCLIC_TIMEOUT(参考值 100ms)内不再变化。冷启动故障常先见 2001 再见 2000;运行中的机床被停机则通常只报 2000。

MD10100 改成多少合适?

西门子给 828D 的参考值是 100ms。保持该值,除非你实测了 PLC 最坏情况循环抖动、并有经过安全评估的理由去放宽。调成几毫秒会让正常抖动都触发报警 2000,属于自己制造的故障;也不要靠调大它去掩盖死循环或 STOP——那等于拆掉”PLC 死了系统能知道”这层保护。

报警 2000 时 ISTACK 是空的,是不是说明没故障?

不是。ISTACK 为空说明 PLC 没有正式进入 STOP,因此没有写停止诊断。在报警 2000 场景下,这个特征直接指向用户程序里的死循环:扫描被困住,负责累加心跳计数器的 10ms 时间中断例程永远执行不到,NCK 超时报警。应把空 ISTACK 读作”故障是死循环而非 STOP”,去检查 10ms 例程与接口计数器累加附近的时间关键代码。

最后更新:2026-10-22

© 版权声明
THE END
喜欢就支持一下吧
点赞5赞赏 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容

广告