SINUMERIK 840D PLC 用户报警详解:700000 段报警号 → DB2 位地址换算 + 自定义报警文本制作

现场最常见的 840D 困惑:”屏幕上跳出一个 700xxx 报警,可我连它在 PLC 里哪个点都不知道。”本文把 840D PLC 用户报警的编号规则、DB2 位地址换算公式、自定义报警文本制作一次性讲透,并附可直接反复查阅的速查表。内容依据西门子官方手册口径与 840D/840D sl 实际项目经验整理。

SINUMERIK 840D 的报警分为两大类:系统报警(西门子出厂内置)和用户报警(机床制造商针对具体机型编写)。用户报警是现场最常用、也最容易被”藏起来”的一类——它不在 NC 报警手册里,全靠机床厂的电工把 PLC 位和文字一一对应。本文聚焦用户报警,尤其是 700000 段。

相关西门子报警排查可对照 828D 报警代码一览表 与 828D 报警排查流程;通用调试软件准备见 数控电气调试软件清单。

一、840D PLC 报警的三段编号范围

840D 的 PLC 报警号(由 DB2 接口位触发)整体分成三段,每段附带的”联动功能”不同:

报警号段名称触发接口附带动作(取决于 FC10 参数)
500000 – 599999通道 PLC 报警DB2 通道区可联动读入禁止、进给保持
600000 – 699999轴 / 主轴 PLC 报警DB2 轴区可联动轴使能、进给保持
700000 – 799999用户区报警DB2 用户区(180.0 起)纯显示,是否联动 NC 由你编程决定

本文的主角是 700000 段:它是留给机床制造商自由定义的一段,每个号对应 DB2 里一个具体的位。系统报警(300000 驱动、400000 等)不在本文范围。

注意:700000 段虽然”自由”,但地址是按固定规则排布的(见下一节),不是随便挑个数就能用。

840D PLC 报警三段编号范围与 DB2 映射总览:500000 通道区 / 600000 轴与主轴区 / 700000 用户区(DB2.DBX180.0 起)

二、★ 核心换算公式:700xxx → DB2.DBX(n).bit

840D 标准用户报警一共 25 个用户区(组),每组 8 字节、64 个报警位。起始地址 DB2.DBX180.0 对应 700000。报警号写成 700xxyy:

  • xx = 组号(00–24,由 OB1 中 FB1 的 MsgUser 参数决定启用几个;默认 10,即组 0–9)
  • yy = 组内序号(00–63,每组只用这 64 个)

换算公式:

字节 = 180 + xx × 8 + yy ÷ 8(取整数部分)
位   = yy mod 8
即:DB2.DBX(180 + xx×8 + ⌊yy/8⌋).(yy mod 8)

算例 1(最经典):700806

  • 组号 xx = 08,组内 yy = 06
  • 字节 = 180 + 8×8 + 6÷8 = 180 + 64 + 0 = 244
  • 位 = 6
  • 结果:DB2.DBX244.6 ✓(西门子技术论坛与多篇资料一致确认)

算例 2:701661

  • 组号 xx = 16,组内 yy = 61
  • 字节 = 180 + 16×8 + 61÷8 = 180 + 128 + 7 = 315
  • 位 = 61 mod 8 = 5
  • 结果:DB2.DBX315.5

算例 3:700458(官方社区例题)

广告
  • 组号 xx = 04,组内 yy = 58
  • 字节 = 180 + 4×8 + 58÷8 = 180 + 32 + 7 = 219
  • 位 = 58 mod 8 = 2
  • 结果:DB2.DBX219.2

重要约定:每组只使用 yy = 00–63 这 64 个号(如 700000–700063)。700064–700099 这类不在标准分区内(按公式会与下一组的 00 号撞位),写程序时一律按 xx00–xx63 编。

700xxx → DB2.DBX 换算:公式 + 700806 算例 + 用户区地址速查表

2.1 用户区 0–9 地址速查表(默认 MsgUser=10)

下表是默认配置(启用组 0–9)下的标准映射。注意组内前 4 字节(yy 00–31)是 EM(错误信息),后 4 字节(yy 32–63)是 OM(操作信息),二者行为不同,详见第四节。

用户区DB2 地址报警号范围前 4 字节后 4 字节
0DBX180.0–187.7700000–700063yy 00–31 EMyy 32–63 OM
1DBX188.0–195.7700100–700163yy 00–31 EMyy 32–63 OM
2DBX196.0–203.7700200–700263yy 00–31 EMyy 32–63 OM
3DBX204.0–211.7700300–700363yy 00–31 EMyy 32–63 OM
4DBX212.0–219.7700400–700463yy 00–31 EMyy 32–63 OM
5DBX220.0–227.7700500–700563yy 00–31 EMyy 32–63 OM
6DBX228.0–235.7700600–700663yy 00–31 EMyy 32–63 OM
7DBX236.0–243.7700700–700763yy 00–31 EMyy 32–63 OM
8DBX244.0–251.7700800–700863yy 00–31 EMyy 32–63 OM
9DBX252.0–259.7700900–700963yy 00–31 EMyy 32–63 OM

若把 FB1 的 MsgUser 设到 25,可启用组 0–24,最大到 DB2.DBX372.7(对应 702400–702463)。MsgUser 改动后必须删除 DB2、DB3 重新上电才能再生数据块。

2.2 UDT1002 扩展接口的地址偏移差异

标准接口是 UDT2(FB1 参数 ExtendAlMsg = FALSE)。若启用扩展报警机制(UDT1002,ExtendAlMsg = TRUE),报警位的 DB2 字节偏移会发生变化——扩展接口下报警位不再从 180.0 起,而是按 UDT1002 的符号定义整体偏移。不同 Toolbox 版本偏移不同,实际地址一律以当前项目的符号表(symbol table)为准,不要凭记忆硬编码。UDT1002 的额外好处见第三节。

三、UDT2 vs UDT1002 两种接口怎么选

项目UDT2(标准)UDT1002(扩展)
激活方式FB1 参数 ExtendAlMsg = FALSE(默认)FB1 参数 ExtendAlMsg = TRUE
报警位地址DB2 用户区 180.0 起(上表)按 UDT1002 符号偏移(以项目符号表为准)
%Z 附加整型值不支持用户区 0 支持 %Z 16 位整型附加值
通道 / 轴 / 用户区数量受标准接口限制支持 10 通道、31 轴、64 用户区
适用大多数改造、常规报警需带数值报警、容量更大的项目

选型建议:普通”某条件成立→提示一条文字”用 UDT2 足够;需要”报警里顺带显示压力值、计数值”这类带参数数值的,用 UDT1002 并在对应数组(如 AddValUserA0)里写入 16 位整型。

四、FC10(AL_MSG)调用与 ToUserIF 参数含义

报警显示由 FC10(AL_MSG) 在 OB1 中调用实现:它读取 DB2 的位,翻译成 MMC 上的错误 / 操作信息。调用位置很关键——必须紧跟 MCP / 手轮传输块之后,否则会错过 HMI 的轮询窗口,出现”位已置 1 但屏幕不显示”。

4.1 EM 与 OM 的区别(决定了报警怎么消失)

每个用户区的前 4 字节 = EM(错误信息,红色),后 4 字节 = OM(操作信息,黑色):

  • EM:触发后一直显示,即使触发条件消失也不自动清除,必须按面板 RESET(Quit) 确认才消失。
  • OM:触发条件一消失就自动消失,无需确认。

所以 700000–700031 是 EM,700032–700063 是 OM——编报警时想让”故障必须人工确认”就放 EM 区,想”提示一下、好了就走”就放 OM 区。

4.2 ToUserIF 的 TRUE / FALSE 差别(仅对 500000 / 600000 段有效)

ToUserIF 决定是否把”进给保持 / 读入禁止 / NC 启动禁止 / 进给停止”等组信号送到通道与轴接口:

  • ToUserIF = TRUE:DB2 中 500000 / 600000 段的位会经”或”运算送到 DB21(通道)和 DB3x(轴)的接口信号,置位即自动产生进给保持、读入禁止等联动。此时 PLC 里不要再直接操作这些接口信号。
  • ToUserIF = FALSE:只产生报警号,不自动联动 NC 动作,是否停进给由你自己在 PLC 里另写逻辑。

用户区(700000 段)本身默认只是显示,是否联动 NC 完全看你有没有额外编程——这也是为什么很多”用户报警亮了但机床照常跑”:它本来就没接停机逻辑。

Quit 参数接确认位(如面板 RESET 键 I3.7,或 DB21.DBX7.7)。EM 靠它清除,OM 不靠它。

FC10 接口调用位置、ToUserIF 对 500000/600000 段的联动差别、EM/OM 分区与 UDT2/UDT1002 选择

五、用 ALARM_S / ALARM_SQ(SFC17 / SFC18)做自定义编号报警

除了”置 DB2 位”这种静态映射,840D(S7-300 PLC)还可用系统功能 SFC17 = ALARM_S、SFC18 = ALARM_SQ 在程序里动态生成报警:

  • 通过 ID / EV_ID 指定任意报警号,配合 SD 传数据,不受 700xxx 接口位数量约束,适合需要大量、编号不固定、或要带关联数据的报警。
  • ALARM_SQ 带确认、ALARM_S 不带确认。
  • ⚠️ 注意:ALARM_S / ALARM_SQ(SFC17/SFC18)属于 S7-300 标准指令,在 SINUMERIK ONE(S7-1500 平台)已不被支持,迁移时需改用 Program_Alarm。840D sl 仍可正常使用。

六、报警文本制作与安装路径(840D sl 新 HMI)

840D sl 的 Operate HMI 用 .ts(基于 XML 的 Qt 翻译格式)存放报警文本。制作步骤:

  1. 从系统目录 /siemens/sinumerik/hmi/template/lng/ 复制模板 oem_alarms_deu.ts;
  2. 改名为 oem_alarms_plc_chs.ts(文件名末三位是语言代码,见 6.1);
  3. 用支持中文的编辑器(如 UltraEdit)打开,保存时务必选 UTF-8 编码 + DOS 换行符(CRLF),否则中文乱码;
  4. 拷到系统目录 /oem/sinumerik/hmi/lng(或 /user/sinumerik/hmi/lng);
  5. 让 HMI 重新上电,系统会自动在同目录生成 oem_alarms_plc_chs.qm。若 .qm 没生成,文本一定显示不出来。

6.1 语言代码 chs / eng / deu 的用法

文件名末三位即语言:

代码语言
chs中文简体
eng英文
deu德文

系统按当前 HMI 语言自动调用对应文件,因此多语言报警要为每个语言各做一份。

6.2 带参数报警(%Z / %1)的文本格式

广告

.ts 内每条报警按 报警号/PLC/PMC 文本 的格式写。可用占位符代入动态值:

  • %Z:16 位整型附加值(用户区 0 在 UDT1002 下支持,值写到 AddValUserA0 数组);
  • %1–%4:通用参数占位符,由 PLC 侧关联数据传入。

示例(来自实际 840D sl 项目):

600409/PLC/PMC 主轴风扇过载,主轴停止
700006/PLC/PMC 机床操作面板%Z急停
720065/PLC/PMC 手轮急停报警

若 .ts 里没给某报警写文本,屏幕上只会显示报警号加四个 O 型字符。

报警文本安装路径树:模板 oem_alarms_deu.ts → 改名 oem_alarms_plc_chs.ts → /oem/sinumerik/hmi/lng → 重启生成 .qm;语言代码 chs/eng/deu 与 %Z 带参

七、报警”复位不掉”的三种典型原因与处理

这是现场最高频的追问。按下面三条排查,基本能覆盖 90% 的情况:

7.1 你用的是 EM,但它本来就要确认

EM(yy 00–31)设计上就是”锁存 + 需 RESET 确认”。如果报警条件早已消失,屏幕上还挂着,这是正常行为——按面板 RESET 或接好的 Quit 位即可清掉。想”条件一消失就自动没”,应改用 OM 区(yy 32–63)。

7.2 Quit 没接好,或 PLC 仍把位顶着

  • Quit 参数没接到确认键 / 确认位,EM 永远等不到确认;
  • 更隐蔽的是:PLC 程序里那个写 DB2 位的线圈一直被条件置 1(比如自锁没复位、或条件逻辑写反),位始终是 1,自然清不掉。用变量表监控对应 DB2.DBX 位,看它在条件解除后是否真回到 0。

7.3 MsgUser 太小 / OB100 / OB121 异常

  • 若报警号落在 MsgUser 启用范围之外,对应 DB2 位根本没被分配,写进去”无响应”,现象可能千奇百怪;
  • FB1 必须在 OB100(冷启动) 中正确初始化,否则 FC10 接口失效;
  • 若写位触发了 OB121(同步错误) 或 PLC 进了 STOP(见第八节 UFEHL),报警服务本身中断,复位当然无效。

八、UFEHL 是什么?为什么它会让 PLC 停机

UFEHL = User Fault(德语 Benutzerfehler,用户故障),出现在 840D/840Di SL 编程手册第 9 章。它不是一个普通报警,而是 PLC 因检测到用户程序故障而进入 STOP 的停机状态。

屏幕上若显示 UAFEHL 700806 这类,编号规则和用户报警一致(700806 → DB2.DBX244.6),意思是:这个 DB2 位对应的用户报警处理环节出了故障,系统选择停 PLC 而不是冒险继续。

常见根因(按出现频率):

  1. FB1 未在 OB100 初始化——后续 FC 调用因指针未初始化而失败;
  2. 缺实例数据块——如 FC10 需要 DB10、FC19 需要 DB19,缺失即报错;
  3. FC10 调用位置错——不在 MCP 传输块之后,接口时序错乱;
  4. MCP 的 MPI 地址不匹配——面板与 NCU 建不起通信;
  5. OB121 同步错误——写位/访问越界触发。

处理顺序:记下停机时显示的 UFEHL 编号 → 在 STEP 7 / TIA 中打开 DB2 看对应位是否为 1 → 查 OB100(FB1 初始化)与 OB121(错误处理)逻辑 → 核对 MCP MPI 地址与实例 DB → 清条件后重新上电。所有改动前请先备份 PLC 程序(参见 828D 参数备份与恢复 的备份思路,PLC 同样要先存再动)。

九、查别人机床的 700000 报警:只需一个 PLC 接口位

给别人修机时,你手里没有对方的报警文本源,但方法很简单——只要找到一个 PLC 接口位:

  1. 记下报警号,用第二节公式算出 DB2.DBX 地址;
  2. 在线监控该位,确认它确实在报警时变 1;
  3. 在 PLC 程序里反查是哪个网络写这个位:很多机床厂会把报警先编在自定义 DB(如 DB200),再用 SFC20 BLKMOV 整块搬进 DB2 用户区——此时真正的触发条件在源 DB,不在 DB2;
  4. 顺藤摸瓜找到那个条件(一个输入点、一个中间继电器、一个比较结果),报警含义就清楚了。

一句话:700000 段报警 = 一个 DB2 接口位 = 机床厂自定义的某个工况。位找到了,原因就找到了。

十、小结与引用说明

  • 700000 段用户报警按 700xxyy 排布,每组 64 个,DB2.DBX(180 + xx×8 + ⌊yy/8⌋).(yy mod 8);
  • EM(yy 00–31)需确认、OM(yy 32–63)自动消失;FC10 的 ToUserIF 决定 500000/600000 段是否联动 NC;
  • 带参 / 大容量用 UDT1002 + SFC17/SFC18;
  • 文本用 oem_alarms_plc_chs.ts 放 /oem/sinumerik/hmi/lng,重启生成 .qm;
  • 复位不掉、UFEHL 停机都先回到”位有没有真变 0、FB1/OB100/OB121 正不正常”。

本文依据西门子官方手册口径与公开技术资料整理,不同 NCU 软件版本、Toolbox 版本在字节偏移、块号上可能有差异,现场以你当前项目的符号表和 Toolbox 头文件为准。欢迎引用,引用时请保留来源标注。

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

请登录后发表评论

    暂无评论内容

广告