云霓AI · 技术专栏

工业装备控制系统软件服务的实话:PLC/HMI 程序、驱动参数、网络组态。这一层别人不碰的,我们讲清楚。

断电前明明存了,重启后数不对 —— 参数没丢,是它从来没被设成保持

技术专栏 2026-11-04 03:35#工业控制#西门子#保持性数据#故障排查

一台上料设备的计数器和设定值,每次断电重启就回到出厂值。 操作工每天开机后手动重设一遍,设了两年。 厂里一直以为是电池问题,换了电池,照旧 后来把程序打开一看,这些地址从头就没勾保持性

这类情况我们碰到过不止一回。 程序好好的,存储卡也没坏,参数丢是因为这些地址从来没被设成保持 不是丢了,是它本来就不保留

先分清两件事:程序丢 和 数据丢

很多人把这两件事混在一起谈"备份" 其实它们的存在位置和保护机制完全是两套

程序也就是代码块,存在 CPU 的装载存储器里 S7-1200 / S7-1500 插上 SIMATIC 存储卡后,程序主体落在卡上。 只要卡没坏、没被误格式化,程序通常都在

数据不一样。 运行中产生的当前值,比如累计产量、温度设定、报警屏蔽位,活在 CPU 的工作存储器里 断电那一刻能不能留下来,取决于你在软件里有没有给这个地址勾上"保持"

没勾,断电就清。 勾了,才会在掉电时写进保持性存储区,上电后读回来 这一步不在备份里,在编译之前的属性设置里。 去年冬天我们碰到一台老改造设备,接班工程师查了两天电池和存储卡。 最后在 CPU 属性页里看到,保持范围只设到 MB20,而设定值全落在 MB60 往后。 两年里每天手输的数,其实一个都没保住

S7-1200 / S7-1500 保持性设置在哪三个位置

这张表建议存手机里,现场按顺序查:

位置 怎么看 常见的坑
M 区 CPU 属性里的"保持性存储器"页,从某个地址起往后保持 只设了起点,没注意范围;默认范围很小,靠后的位不保留
全局 DB DB 属性里可整体勾"保持",或每个变量单独勾 从老版本移植的块,属性页看不出实际状态,要逐变量核对
优化块里的单个变量 打开 DB,变量表的"保持性"列 这一列默认是空的,勾了才保留,漏勾是常见的漏设点

再补一条:非优化 DB 和优化 DB 的表现不一样 非优化块可以按整个 DB 一次性设置保持性 优化块要一个变量一个变量地设 从老程序移植过来的项目特别容易在这栽跟头——老程序里以为设过的地址,迁过来就没了

为什么这一步脆

排查现场我们常见三个坑,按出现频率排:

一,改了程序重新下载,下载对话框里选择了"重新初始化保持性数据" 下载是选上去的,当年写程序的同事手一勾,上线第一天的设定值全清零 这种问题查起来特别绕,因为程序本身一点错都没有

二,HMI 上写的设定值和 PLC 里收到的值不是同一个地址。 画面上看着存了,PLC 里那个地址根本不是保持性的。 这和之前写过的一篇"三份参数"是同一个根子——先确认数据住在哪,再谈保不保

三,数据确实勾了保持,但 CPU 断电时的电压跌落曲线不对,保持区写入没完成 这种属于硬件工况问题,占比不高 但要放在排查链的最后,别一上来就换件

一棵现场判断树

数据断电丢失,按这个顺序走:

  1. 打开程序,查丢的那个地址有没有勾保持性 没勾 → 勾上,重新下载时注意"初始化保持性数据"那个选项,选"不初始化"
  2. 勾了还丢 → 查下载记录,是不是有人重下程序时初始化了保持区
  3. 还丢 → 查 M 区保持范围起点,地址是不是落在范围之外
  4. 都对 → 再怀疑存储介质和 CPU 硬件,这时候才轮到换件

第 1 步能拦下大多数情况。 先把软件层查完,再动硬件,顺序别反

什么情况下不必找我们

上面第 1、2 步你在博图里花半天就能自己查清,不需要外人来 真正拿不准的只有两种:程序被密码锁着打不开属性页,或者在线状态和程序对不上、不敢动 到那一步再联系,我们做的是把程序完整读出来、校验、归档这一层 公司是新的,团队在电气与软件这两行做了三十多年——能不能做、前提是什么,评估完照实说

更多这类速查表,我们会持续整理。

← 返回专栏