西门子 S7‑200 里,数据块 (DB) ≠ 上电第一次扫描 (SM0.1),它们用途、时机、效果完全不一样。
一、一句话核心区别
数据块(Data Block / 保持寄存器):管的是 变量的初始值 + 掉电保持。
SM0.1(上电第一个扫描周期):管的是 PLC 上电 / 重启后,只执行一次的程序。
二、数据块(DB)到底干嘛的?
作用
给 V 区、M 区设定初始值
设定哪些地址 掉电保持
下载到 PLC 后,只有下载时生效一次
生效时机
只有两种情况会赋值:
第一次下载程序时
清空 PLC 内存后重新下载时
平时上电、重启、RUN→STOP→RUN→ 数据块不会重新赋值!
例子
你在数据块里写:VD0 = 100
下载 → VD0 = 100
程序里把 VD0 改成 200
断电重启→ VD0 还是 200,不会变回 100
三、SM0.1 上电第一次扫描 干嘛的?
作用
PLC 上电 / 重启后,只执行 1 个扫描周期
用来做:初始化、复位、清零、设定初始值、调用初始化子程序
生效时机
每次上电 / 重启 / 从 STOP 切到 RUN→ 都会再执行一遍
例子
plaintext
SM0.1 MOV 100, VD0 RST M0.0, 10
上电 → VD0=100,M 区复位
程序把 VD0 改成 200
断电重启→ VD0 又变回 100
四、最关键区别(一定要记)
表格
| 项目 | 数据块 DB | SM0.1 上电第一次扫描 |
|---|---|---|
| 执行时机 | 下载程序时 | 每次上电 / 重启都执行 |
| 执行次数 | 只一次 | 每次上电 1 次 |
| 掉电重启后 | 不会重新赋值 | 会重新赋值 |
| 主要用途 | 设定初始值、掉电保持 | 程序初始化、复位、清零 |
| 会不会覆盖当前值 | 不会 | 会,每次都覆盖 |
五、现场最实用结论(你直接记这个)
想让变量真正每次上电都归零 / 归初值→ 必须用 SM0.1数据块做不到!
想让变量掉电后还能保存→ 用 数据块设置保持区
90% 的初始化错误都是:
以为数据块会每次上电赋值→ 其实只有 SM0.1 才会
六、你该怎么用(标准写法)
plaintext
// 每次上电都执行一次初始化 SM0.1 MOV 0, VD0 // 计数清零 MOV 0, VD10 // 重量清零 RST M0.0, 20 // 标志位复位。





