返回
求教:施耐德 M241 控制器,SoMachine 环境。 程序里设了 50 个 Retain 变量,存的是工艺配方。 运行两个月都没事。昨天车间停电检修,今天上电发现这 50 个变量全部变成 0 了
发布

求教:施耐德 M241 控制器,SoMachine 环境。 程序里设了 50 个 Retain 变量,存的是工艺配方。 运行两个月都没事。昨天车间停电检修,今天上电发现这 50 个变量全部变成 0 了

27阅读 1 回复 2026-04-07 10:57发布
关注Ta

15610786615468普通会员楼主

电话/手机:联系客服

求教:施耐德 M241 控制器,SoMachine 环境。
程序里设了 50 个 Retain 变量,存的是工艺配方。
运行两个月都没事。昨天车间停电检修,今天上电发现这 50 个变量全部变成 0 了!
确认:

程序里没有写 Reset 指令。

电池电量显示是绿灯。

停电前变量是有数值的。
现在客户的配方全丢了,急死人了。为什么停电会导致掉电保持区清空?有没有大佬遇到过 M241 固件 Bug 的?

以下内容回复后可见

优质评论内容

  • 明扬工控技术客服

    明扬工控技术客服2026-04-07 11:14:58

    这不太像“电池坏了”或单纯固件 Bug,最像是:上电后控制器发生了“无效上下文(invalid context)/ 冷复位效果”,导致 RETAIN 变量按初始化值恢复了。
    对 M241 来说,VAR RETAIN 在正常掉电重上电时本应保留;但在 Reset cold、某些下载场景,或者控制器判断 remanent context 无效时,RETAIN 会被重置。相反,PERSISTENT(在 M241 上等同于 retain-persistent)在 Reset cold 时仍会保留。

    你现在这个现象,最值得先怀疑的是这几个点。

    第一,配方变量如果只是 RETAIN,本身就不够稳妥。
    Schneider 的文档明确写了:M241 上 VAR RETAIN 在 Power cycle 时保留,但在 Reset cold 时会被重置;而 persistent 在 M241 上按 retain-persistent 处理,Reset cold 时仍保留。做“工艺配方”这类必须长期保存的数据,更适合放在 VAR_GLOBAL PERSISTENT RETAIN 一类的持久区,而不是只用 RETAIN。

    第二,电池绿灯基本不能证明 Retain 区没问题。
    M241 的备用电池主要是给 RTC 实时时钟 供电的,不是拿来维持 Retain 变量的。也就是说,电池正常并不能排除 remanent 数据被清空。

    第三,很像停电后控制器判定“saved context 无效”。
    官方说明写得很直接:上电加载 boot application 时,会做一次 Check context 检查;只有当应用和 remanent variables 与 boot application 一致时,context 才算有效。若 context 无效,控制器会进 STOPPED,而且 RETAIN 会按类似 Reset cold 的效果被重置。

    这里最常见的触发原因,不是神秘 Bug,而是下面这种情况:

    你之前做过 online change / 局部修改,但没有手动更新 Boot application。
    Schneider 官方特别提醒:在线修改不会自动写入 boot application;如果下次重启时检测到程序上下文和 boot application 不一致,remanent context 会被判无效,RETAIN 变量会像 Reset cold 那样被重置。

    所以,结合你的描述,我会按这个概率排序判断:

    这 50 个变量实际上只是 RETAIN,不是 PERSISTENT。
    之前做过在线修改/下载,但没执行 Create boot application。
    停电上电后发生了 context invalid,导致 RETAIN 清零。
    其次才考虑异常复位、文件系统/存储异常。官方也提到控制器上电时会初始化文件系统,并建议至少每年做一次真正断电重上电。

    你现在最该先查的是这几件事:

    1)检查变量声明方式
    看这 50 个变量到底是:

    VAR RETAIN
    还是
    VAR_GLOBAL PERSISTENT RETAIN

    如果只是 RETAIN,那它在某些复位场景下丢失是符合官方行为的。

    2)检查昨天之前有没有做过 online change / 下载
    哪怕两个月前改过一次,只要没把当前程序写成新的 boot application,重启时就可能出事。官方明确说在线修改不会自动写入 boot application。

    3)看控制器上电后的状态和日志
    如果上电后曾进过 STOPPED,而不是按原状态直接 RUN,这很支持“context invalid / cold reset 效果”这个方向。官方也说明了:当 remanent variables 无效时,某些启动模式下会进 STOPPED。

    4)确认有没有人或程序触发过 Reset cold
    M241 的 Reset cold 不一定只能手动点菜单,也可以由应用内部调用或通过通信触发;而 Reset cold 会把 RETAIN 重置、但保留 retain-persistent。

    我不太建议你现在先把锅甩给“固件 Bug”。
    从官方机制看,最像是“RETAIN 用错场景 + boot application/context 不一致”,这比固件问题常见得多。

    你接下来可以这样处理:

    先把配方变量改成 PERSISTENT / RETAIN PERSISTENT。M241 上 persistent 按 retain-persistent 处理,掉电和 cold reset 都更稳。
    下载后,明确执行一次 Create boot application,不要只靠在线修改。
    再做一次受控断电测试,确认变量是否还能保留。
    同时把配方再备份到文件或上位机,别只押在 remanent 区上。