828D 用户报警位地址速查:DB1600 顺序算法(700000–700247 / 701000–701999 扩展)

屏幕上跳出一条 7000xx 报警,你打开 PLC 程序想找那个”1″,翻遍 DB2 也找不到——因为你找错了数据块。828D 的用户报警激活位在 DB1600,840D 在 DB2;更要命的是,两家的算法也不是一回事:828D 是顺序排列(248 条挨着排下去),840D 是分组排列(每 8 字节一组 = 64 条)。同一个 700xxx 号段,套错算法算出来的地址差出几十个字节。

这篇把 828D 侧的地址算法、扩展报警段、报警文本文件和”进报警日志”的设置一次讲清,并给一张与 840D 的逐项对照表。所有数据均来自西门子官方调试手册与西门子中国 CNC4YOU 应用文档,手册里没写清楚的(比如 MD14516 的 Bit5)我会把两版口径都摆出来,标明需实机验证,不猜。

相关阅读:840D 侧的 DB2 分组算法见 SINUMERIK 840D PLC 用户报警详解:700000 段报警号 → DB2 位地址换算;828D 报警号整体分段规则见 SINUMERIK 828D 报警号分段速查表。

一、两个系统的算法不同:828D 是顺序排列,840D 是分组排列

这是本文最值钱的一条。两边都是 700000 起头,但“序号 → 地址”的映射规则完全不同,混用必然算错。

表 1 828D 与 840D 用户报警地址算法对照

项SINUMERIK 828D(顺序排列)SINUMERIK 840D(分组排列)
激活位所在数据块DB1600DB2
起点700000 = DB1600.DBX0.0700000 = DB2.DBX180.0
算法顺序:字节 = 序号 ÷ 8 取整;位 = 序号 ÷ 8 的余数分组:180 +(中间两位 × 8)+(末两位 ÷ 8 的商 . 余数)
算例 700247247 ÷ 8 = 30 余 7 → DB1600.DBX30.7按分组式:180 + 02×8 + 47÷8(商 5 余 7)= DB2.DBX201.7
算例 700352828D 标准段止于 700247,此号落在扩展段180 + 03×8 + 52÷8(商 6 余 4)= DB2.DBX210.4
算例 701661828D 侧落在扩展段(701000–701999)180 + 16×8 + 61÷8(商 7 余 5)= DB2.DBX315.5
标准条数248 条(700000–700247)分组连续排列

828D 的顺序算法写成公式就三行:

序号 N = 报警号 - 700000
字节   = N / 8         (取整)
位     = N % 8         (余数)
地址   = DB1600.DBX<字节>.<位>

拿 700247 试一遍:N = 247 → 247 / 8 = 30,247 % 8 = 7 → DB1600.DBX30.7。和手册表里的最后一行一致。

而 840D 的分组算法要拆成三段算:报警号 700000 的后四位拆成”中间两位”和”末两位”,中间两位乘 8 是组偏移,末两位除以 8 是组内位置。这套拆法在 828D 上没有任何意义——828D 就是一条一条往下排。

828D 顺序算法与 840D 分组算法对照:700247 在 828D 上是 DB1600.DBX30.7,在 840D 上是 DB2.DBX201.7

二、828D 标准用户报警:248 条 → DB1600.DBX0.0 – DBX30.7

官方原文:SINUMERIK 828D 提供 248 个用户报警(700000 – 700247),对应接口信号为 DB1600.DBX0.0 – DB1600.DBX30.7。每条报警除了激活位,还配一个变量接口(用来往报警文本里填数)和一个报警响应字节。

表 2 828D 标准用户报警地址速查(官方表节选)

报警号激活位(PLC 信号)变量接口报警响应
700000DB1600.DBX0.0DB1600.DBD1000MD14516[0](或 DB4500.DBB3000)
700001DB1600.DBX0.1DB1600.DBD1004MD14516[1](或 DB4500.DBB3001)
700002DB1600.DBX0.2DB1600.DBD1008MD14516[2](或 DB4500.DBB3002)
700003DB1600.DBX0.3DB1600.DBD1012MD14516[3](或 DB4500.DBB3003)
700004DB1600.DBX0.4DB1600.DBD1016MD14516[4](或 DB4500.DBB3004)
700005DB1600.DBX0.5DB1600.DBD1020MD14516[5](或 DB4500.DBB3005)
700006DB1600.DBX0.6DB1600.DBD1024MD14516[6](或 DB4500.DBB3006)
700007DB1600.DBX0.7DB1600.DBD1028MD14516[7](或 DB4500.DBB3007)
700008DB1600.DBX1.0DB1600.DBD1032MD14516[8](或 DB4500.DBB3008)
……………………
700246DB1600.DBX30.6DB1600.DBD1984MD14516[246](或 DB4500.DBB3246)
700247DB1600.DBX30.7DB1600.DBD1988MD14516[247](或 DB4500.DBB3247)

变量接口的规律:起始 1000,每条 +4 字节——所以官方手册里有的版本印成 DBD(双字)、有的版本印成 DBW(字)。按”+4 步进”这个事实判断,DBD(4 字节)才是对的,DBW 那版大概率是印刷口径遗留。

报警响应有两种写法:官方调试手册(10/2015 版)写的是 DB4500.DBB3000 – DBB3247,另一版手册与绝大多数中文资料写的是 MD14516 $MN_USER_DATA_PLC_ALARM。两者指同一件事(报警反应/清除条件),你手上这台机器认哪个,以实机为准;下文统一用 MD14516 表述。

三、828D 扩展用户报警:1000 条 → DB1600.DBX4000.0 – DBX4124.7

248 条不够用时,828D 可以激活扩展 PLC 报警:额外 1000 条,编号 701000 – 701999,激活位在 DB1600.DBX4000.0 – DB1600.DBX4124.7(1000 条 = 125 字节)。

广告

表 3 828D 扩展用户报警速查

项值
报警号范围701000 – 701999(1000 条)
激活位DB1600.DBX4000.0 – DB1600.DBX4124.7
变量接口DB1600.DBD5000 起,每条 +4 → 701247 = DB1600.DBD5988
可用数字变量的号段仅 701000 – 701247;701248 – 701999 无对应数字变量
报警响应DB9913.DBB0 – DB9913.DBB999(每个报警号 1 字节)
软件版本要求828D V4.7.4 以上;PLC Programming Tool V3.3 以上
硬件前提PLC 程序里必须额外包含 DB9913(超过 248 条时)
操作权限制造商访问级(Manufacturer) + 对应口令
显示颜色红色 = 报警(进”报警列表”);黑色 = 消息(进”消息”)

扩展段的地址算法和标准段一样是顺序的,只是起点换成 4000:

序号 M = 报警号 - 701000
字节   = 4000 + M / 8
位     = M % 8
地址   = DB1600.DBX<字节>.<位>

例:701000 → M = 0 → DB1600.DBX4000.0;701999 → M = 999 → 4000 + 124 = 4124,999 % 8 = 7 → DB1600.DBX4124.7。

701000 – 701247 这一小段是”带变量的扩展报警”:同一个报警号可以靠变量值显示不同文本(比如同一个号显示”轴 3 超程”和”轴 5 超程”)。701248 往后就没有变量了,别在这一段上找 DBD 接口。

828D 扩展用户报警 701000-701999 映射:激活位 DB1600.DBX4000.0 到 DBX4124.7,变量区 DBD5000 到 DBD5988,响应区 DB9913.DBB0 到 DBB999

四、报警文本文件在哪:oem_alarms_plc_xxx.ts,不是 alpu.txt

中文圈讲”西门子用户报警文本”时经常直接搬 alpu.txt——那是 840D / 810D 的东西。828D 用的是另一套文件和另一套占位符,照搬必然扑空。

表 4 报警文本文件:828D 与 840D 完全不是一套

项SINUMERIK 828DSINUMERIK 840D / 810D
文件名oem_alarms_plc_xxx.ts(xxx = chs / eng / deu 等语种)alpu.txt(或 alpu_xxx.txt)
存放目录CF 卡 oem/sinumerik/hmi/lng常用 …\dh\mb.dir\
文件性质基于 XML 结构的文本源文件纯文本,报警号 + 文本
文本占位符%b %d %f %i %o %u %x%1 – %4
生效方式只在系统启动时装载 → 必须重启,改动才生效需重新装载 / 重启
文件名大小写必须小写,否则系统不识别—
同目录姊妹文件oem_alarms_cycles(循环报警)、oem_partprogram_messages(加工程序信息)—

828D 的占位符含义(官方表):

占位符含义
%b32 位值的二进制表示
%d整数(十进制)
%f4 字节浮点数
%i带符号十进制整数
%o八进制整数
%u无符号十进制整数
%x十六进制整数

两个最容易踩的坑:

  1. 改完不重启。官方原话是”报警文本文件只在启动过程中被转换,必须重启系统才能激活报警”。改完文件不重启,屏幕上永远是旧文本。
  2. 动了文件结构。官方明确要求”文件结构不得改变”——只改文本内容和报警号,别动标签和层级。第三方资料里常见的 /oem/cfg/oem_alarms_plc_eng.ts 写法与官方手册的 oem/sinumerik/hmi/lng 不一致,以你机器 CF 卡上的实际目录为准。

关于编码:官方手册没有给出 BOM/ANSI 的硬性规定,只要求”不改动结构”。中文环境出现乱码时,先确认编辑器没有改写编码(用与原件一致的编码另存),再重启 HMI 验证;别只改编码不重启——重启才是生效条件。

828D 报警文本文件 oem_alarms_plc_xxx.ts 的存放路径、小写要求、重启生效与 %d %f %x 占位符,对照 840D 的 alpu.txt 与 %1-%4

五、让 PLC 用户报警进报警日志:MD14516[xx] Bit5 = 1

828D 的报警日志默认只记系统报警,不记 PLC 用户报警。想让 7 开头的用户报警也进日志,需要单独设一位——这条官方写得很分散,中文侧几乎没人讲透。

表 5 让 PLC 用户报警进入报警日志的两种做法

报警类型做法生效方式
标准用户报警(700000–700247)改对应报警的 MD14516[xx] 的 Bit5 = 1重启 HMI
扩展用户报警(701000–701999)改 DB9913 中对应报警号的配置数据 Bit5 = 1下载到 PLC → 重启 NCK

官方应用文档(西门子中国 CNC4YOU,作者 Bi Zhi Chao,2020.7)原文:修改对应用户报警属性参数 14516[xx]_Bit5=1,重启 HMI 后,用户报警会显示到报警日志中。扩展报警同理,但落点在 DB9913,且要下载 PLC + 重启 NCK。

软件版本要求:V4.8 及以上。

MD14516 的 Bit5 设为 1 让 828D 的 PLC 用户报警进入报警日志,标准段重启 HMI,扩展段改 DB9913 后下载 PLC 并重启 NCK

六、MD14516 各位含义:报警反应 vs 报警/消息

MD14516($MN_USER_DATA_PLC_ALARM)是一个数组,下标与报警号一一对应:MD14516[0] 对应 700000,MD14516[247] 对应 700247。每一位管一件事。

表 6 MD14516[xx] 位定义(两版口径并列)

位英文调试手册口径中文资料 / 简明调试手册口径
Bit 0NC 启动禁止NC 启动禁止
Bit 1读入禁止读入禁止
Bit 2所有轴进给保持进给保持
Bit 3急停急停
Bit 4PLC 停止PLC 停止
Bit 5Reserved(保留)= 1 让该报警进报警日志
Bit 6报警 / 消息定义:1 = 报警,0 = 消息DB1600.DBX3000.0 复位清除
Bit 7POWER ON(断电清除)断电清除

Bit5 与 Bit6 存在两版口径冲突,必须实机确认:英文调试手册把 Bit5 标为 Reserved、Bit6 用作”报警/消息”选择;中文侧(含西门子中国 CNC4YOU 应用文档)写 Bit5 = 1 让报警进日志、Bit6 对应 DB1600.DBX3000.0 复位清除。两者都出自西门子体系,但指向不同——动手前先记录 MD14516 原值,改一条试一条。

“报警”和”消息”的区分很简单,但影响排查路径:

  • 报警(Alarm):红色,显示在报警列表里,通常是需要停机/确认的(如”电机过载”);按中文口径,需在 PLC 里编程对 DB1600.DBX3000.0 复位才能清除。
  • 消息(Message):黑色,显示在消息下,状态满足后自动消失(如”液压未起动”),不需要操作者确认。

至于”报警显示区只看到最新一条”——这不是故障。官方说明:有一条以上报警时,只有最新出现的一条显示在报警显示区,用向下箭头提示还有更多,需到报警清单里看。想让多条滚动显示,设 MD9056(范围 500 – 10000,单位 ms,小于 500 不滚动),官方应用文档建议 3000;828D 简明调试手册里印的”建议 300″与其自身”小于 500 不滚动”矛盾,以 3000 为准。

七、扩展报警的 DB9913 配置:每个报警号一段数据

扩展报警(701000–701999)的报警响应不走 MD14516,走 DB9913:每个报警号一段配置数据,DB9913.DBB0 对应 701000,DB9913.DBB999 对应 701999。

广告

配置步骤(官方应用文档口径):

  1. 修改 PLC 类型 → 点 OK → 再点 OK 确认;
  2. 在程序库中双击 DB9913 并确定 → 每个报警号自动生成一段配置数据;
  3. 修改 DB9913 中对应报警号的配置数据,Bit5 = 1;
  4. 下载到 PLC;
  5. 重启 NCK → 扩展用户报警开始进入报警日志。

另外,DB9913 还有一个用途:多通道机床上,报警归属哪个通道由 DB9913 或 MD14518 $MN_USER_DATA_PLC_ALARM_ASSIGN 决定。单通道机床不用管这条。

前提别忘了:超过 248 条报警才需要 DB9913,且软件要 V4.7.4 以上、PLC Programming Tool V3.3 以上。老版本机器上翻遍程序库也找不到这个块。

八、808D / 828D / 840D 三者的条数差异

同一个号段、三种排法,现场最容易混。

表 7 808D / 828D / 840D 用户报警容量与地址对照

系统标准用户报警激活位范围扩展段
808D128 条(700000 – 700127)DB1600.DBX0.0 – DB1600.DBX15.7—
828D248 条(700000 – 700247)DB1600.DBX0.0 – DB1600.DBX30.71000 条(701000 – 701999)→ DBX4000.0 – DBX4124.7
840D分组连续排列DB2.DBX180.0 起(分组算法)—

808D 的 128 条 / DBX15.7 这组数字来自第三方整理的转载资料,未查到西门子官方手册原文,现场用前请按公式反推验证(127 ÷ 8 = 15 余 7,与 DBX15.7 自洽)。828D 与 840D 的数据均出自官方手册与西门子中国 CNC4YOU。

九、常见问题表:触发不显示文本 / 乱码 / 权限被拒

表 8 828D 用户报警故障速查

现象最可能原因处理
位已置 1,报警号出来了但没有文本该报警号没配文本;或改完文本没重启官方:未配置文本时”只显示报警号”;改完必须重启系统/HMI
中文乱码编辑器改写了文件编码或结构官方要求”文件结构不得改变”;用与原件一致的编码另存,重启验证
改文件时提示权限被拒访问级不够;或文件被占用 / 只读需制造商(Manufacturer)访问级口令;通过 Access MyMachine /P2P 或 WinSCP 取文件时注意系统服务占用,改完放回原目录
报警触发但动作不对(该停不停 / 直接急停)MD14516[xx] 的 Bit0 – Bit4 设置逐位核对报警反应位;Bit0 启动禁止、Bit3 急停
报警显示区只看到最新一条多条报警时的默认行为设 MD9056(500 – 10000 ms)滚动显示,建议 3000
报警不进报警日志默认 PLC 用户报警不记日志标准段 MD14516[xx] Bit5 = 1 + 重启 HMI;扩展段 DB9913 Bit5 = 1 + 下载 PLC + 重启 NCK
算出的地址在 PLC 里根本不存在把 840D 的 DB2 分组算法套到了 828D828D 一律用 DB1600 顺序算法;扩展段另起 4000
扩展报警没有 DB9913软件版本不够需 828D V4.7.4 + PLC Programming Tool V3.3 以上

十、和 840D 那篇怎么配合看

两篇是同一个号段的两半,别互相替代:

  • 机器是 828D / 808D → 看这篇,激活位一律在 DB1600,顺序算法;扩展段另算;
  • 机器是 840D / 840D sl → 看 840D 那篇,激活位在 DB2,分组算法(180 + 中间两位×8 + 末两位÷8);
  • 不确定是哪种 → 先看报警号:828D 标准段止于 700247,看到 7003xx 及以上的号,在 828D 上只可能落在扩展段(701000 起);在 840D 上则继续按分组往下排。

相关阅读:840D 侧 DB2 分组算法与自定义报警文本制作见 SINUMERIK 840D PLC 用户报警详解;828D 报警号整体分段与”这条报警该找谁”判定见 SINUMERIK 828D 报警号分段速查表。

常见问题

828D 的用户报警激活位在哪个 DB?和 840D 一样吗?

不一样。828D 在 DB1600,840D 在 DB2,算法也不同。828D 提供 248 条标准用户报警(700000 – 700247),对应 DB1600.DBX0.0 – DB1600.DBX30.7,顺序排列:序号 N = 报警号 − 700000,字节 = N ÷ 8 取整,位 = N ÷ 8 的余数,如 700247 = DB1600.DBX30.7。840D 是分组排列,起点在 DB2.DBX180.0,按”180 + 中间两位×8 + 末两位÷8 的商.余数”计算。两边都是 700000 开头,但绝对不能混用算法。828D 若启用扩展报警(701000 – 701999),激活位另起一段:DB1600.DBX4000.0 – DB1600.DBX4124.7。

828D 怎么让 PLC 用户报警显示在报警日志里?

默认的报警日志只记系统报警,PLC 用户报警不记,需要单独设一位。标准用户报警(700000 – 700247):把对应报警的 MD14516[xx] 的 Bit5 设为 1,然后重启 HMI 生效。扩展用户报警(701000 – 701999):改 DB9913 中对应报警号的配置数据 Bit5 = 1,下载到 PLC 后重启 NCK 生效。软件版本需 V4.8 及以上。注意英文调试手册把 MD14516 的 Bit5 标为 Reserved、Bit6 用于报警/消息选择,与中文侧口径不一致,动手前先记录原值并逐条验证。

报警号 700247 对应哪个接口位?为什么 840D 的算法套到 828D 上会错?

在 828D 上,700247 对应 DB1600.DBX30.7:N = 247,247 ÷ 8 = 30 余 7。之所以 840D 的算法套过来会错,是因为两系统的映射规则根本不同——828D 是顺序排列,248 条报警按序号连续排在 DB1600 的 31 个字节里;840D 是分组排列,每 8 字节一组代表 64 条报警,要把报警号后四位拆成”中间两位”和”末两位”分别计算,起点还在 DB2.DBX180.0。同一条 700247 按 840D 分组式算出来是 DB2.DBX201.7,数据块和字节都变了。所以算之前第一件事是确认你的系统是 828D/808D 还是 840D,再选算法。

最后更新:2026-10-25

延伸阅读:828D 扩展用户报警 701000–701999 怎么加?DB9913 配置数据 + DB1600 高位段实操

本文有英文版:SINUMERIK 828D User Alarm Bits: DB1600 Sequential Mapping and Extended 701000-701999
面向海外读者的完整英文版,内容与本文对应 — 可直接转给非中文同事或海外客户。
© 版权声明
THE END
喜欢就支持一下吧
点赞8赞赏 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容

广告