鸿信自动化 ST/C 语言模块 指令讲堂 资料下载 第 2 课
C 语言模块 · 第 2 课 基础

内存模型:W[i]↔D[i] / B[i]↔M[i]

6 段 · 共 1:55 · 数字人讲师示范 · 完全免费

C 功能块怎么读写 PLC 的内存?本课讲清 W[i] 对应 D[i]、B[i] 对应 M[i] 的映射,让你在 C 里自由操作软元件。

正在加载数字人讲师…
讲师模型较大(约 87MB),首次打开需要等待。加载完后数字人会自动开始讲解,这段时间可以先往下读讲稿。
已等待 0 秒
等待中… 在仿真器里打开

本课讲稿

1/6两块内存:字和位0:20

C 功能块眼里只有两块内存:一块放数,叫 W 数组,每个格子 16 位,装一个短整型;一块放开关,叫 B 数组,每个格子 8 位,只当 0 和 1 用。W[0]、W[1] 往下排,B[0]、B[1] 也往下排,就这么简单。

2/6W[i] 对应 HD[i]0:20

绑到寄存器上:W[0] 就是 HD0,W[1] 就是 HD1,一一对齐,不多不少。所以上一课的 HD1 阈值、HD2 计数值,在 C 里写的就是 W[1]、W[2]。读它就是读寄存器,写它就是写寄存器,实时生效。

3/6B[i] 对应 HM[i]0:17

位也一样:B[0] 对应 HM0,写 1 就点亮,写 0 就熄灭。注意 B 的每个格子是 8 位宽,但我们只用它当开关,别拿它存大于 1 的数——要存数回 W 区去,这是两块内存的分工。

4/6地址怎么排:W 在前、B 在后0:19

底层一点:W 区从 0 号字节开始,每个数占 2 个字节,所以 W[3] 在第 6 字节;B 区从 16384 号字节起,每个占 1 字节。这个分界编译器和运行时都认,你只要记住 W 放前头、B 放后头就行。

5/6FUNC1 HD0 HM0:基址平移0:22

本仿真器里 C 块统一用 FUNC1 HD0 HM0 挂载:基址平移到 HD 和 HM,W 数组落在 HD 区、B 数组落在 HM 区。为什么不绑 D 和 M?因为工艺场景每帧都要写 D0 到 D2,绑过去就会互相覆盖,这是实打实踩过的坑。

6/6小结:拿 fb_counter 再走一遍0:17

回头再看自由计数器,现在应该一目了然:W[1] 读 HD1 当阈值,W[2] 读 HD2 做自增,B[0] 写 HM0 当完成位。内存模型就这么一层,下一课开始写真正的定时器,把这套路子用起来。