西门子S7-1500PLC的PEEK/POKE学习笔记

PEEK / POKE 是西门子 S7-1500 PLC 中用于底层内存 "间接寻址" 的核心指令(SCL 语言专用):

PEEK: 从指定内存地址 读取 数据
POKE **:**向指定内存地址 写入 数据

它们允许程序在运行时动态计算地址,实现灵活、通用的数据处理。

一、基本参数(PEEK / POKE 共用)

1. 存储区 Area(BYTE)

指定要访问的内存区域:

十六进制 符号 说明

16#81 I 输入区(Input)

16#82 Q 输出区(Output)

16#83 M 位存储区(Memory)

16#84 DB 数据块(Data Block)

2. DB 编号 dbNumber(DINT)

访问 DB 区时:填 DB 号(如 10 → DB10)

访问 I/Q/M/PI/PQ 时:必须填 0

3. 字节偏移 byteOffset(DINT)

从区域起始处算起的 字节地址(0 起)

4. 位偏移 bitOffset(INT,仅 BOOL 指令用)

字节内的位号(0~7)

二、PEEK 指令族(读)

1. PEEK_BOOL:读 1 位(Bit)

scl:

XML 复制代码
// 语法
Value := PEEK_BOOL(area := , dbNumber := , byteOffset := , bitoffset := );

示例:读 DB5.DBX10.3 → 赋值给 bResult

scl:

XML 复制代码
bResult := PEEK_BOOL(area := 16#84,
                     dbNumber := 5,
                     byteOffset := 10,
                     bitoffset := 3);
2. PEEK / PEEK_BYTE:读 1 字节(Byte)

scl:

XML 复制代码
bResult := PEEK(area := 16#84, dbNumber := 5, byteOffset := 10);
// 或
bResult := PEEK_BYTE(area := 16#84, dbNumber := 5, byteOffset := 10);
3. PEEK_WORD:读 1 字(2 字节)

scl:

XML 复制代码
wResult := PEEK_WORD(area := 16#84, dbNumber := 5, byteOffset := 10);
// 对应 DB5.DBW10
4. PEEK_DWORD:读双字(4 字节)

scl:

XML 复制代码
dwResult := PEEK_DWORD(area := 16#84, dbNumber := 5, byteOffset := 10);
// 对应 DB5.DBD10
5. PEEK_LWORD:读长字(8 字节)

scl:

lwResult := PEEK_LWORD(area := 16#84, dbNumber := 5, byteOffset := 10);

三、POKE 指令族(写)

1. POKE_BOOL:写 1 位

scl:

XML 复制代码
POKE_BOOL(area := , dbNumber := , byteOffset := , bitoffset := , value := );
示例:写 TRUE 到 DB5.DBX10.3
scl
POKE_BOOL(area := 16#84,
          dbNumber := 5,
          byteOffset := 10,
          bitoffset := 3,
          value := TRUE);
2. POKE / POKE_BYTE:写 1 字节

scl:

XML 复制代码
POKE(area := 16#84, dbNumber := 5, byteOffset := 10, value := 16#AB);
3. POKE_WORD / POKE_DWORD / POKE_LWORD

scl:

XML 复制代码
// 写字
POKE_WORD(area := 16#84, dbNumber := 5, byteOffset := 10, value := 1234);

// 写双字
POKE_DWORD(area := 16#84, dbNumber := 5, byteOffset := 10, value := 12345678);

四、关键使用规则(必看)

. 仅 SCL 可用:LAD / FBD 无此指令

. DB 必须是非优化

. DB 属性 → 取消 优化的块访问,否则地址不固定,PEEK/POKE 无法定位

. 地址越界会导致 PLC 停机

. byteOffset + 长度 不能超出区域 / DB 边界

**.**数据类型匹配,比如:PEEK_WORD 对应 2 字节,POKE_DWORD 对应 4 字节,类型错位会导致数据错乱

五、典型用途

动态数组 / 表格:用变量做偏移,循环批量读写

通用功能块:一套程序处理不同 DB / 地址

旧程序兼容:与非优化 DB、第三方库交互

IO 映射:PI/PQ 直接读写(1500 专属)

数据日志 / 配方:批量读写连续存储区

六、简单对比:直接寻址 vs PEEK/POKE

直接寻址(固定)

scl:

XML 复制代码
DB5.DBW10 := 1234;

间接寻址(动态)

scl:

XML 复制代码
dbNo := 5;
offset := 10;
POKE_WORD(area:=16#84, dbNumber:=dbNo, byteOffset:=offset, value:=1234);

七、常见错误

Area 写错(如用 84 代替 16#84)

DB 仍为 "优化访问"

byteOffset 越界

位偏移写 8 或负数

数据类型长度不匹配(如用 POKE_WORD 写 3 字节)

相关推荐
IT古董9 小时前
【MES学习笔记系列】05 - MES 数据库设计
笔记·学习·mes
不瘦80斤不改名10 小时前
05-vibe-coding-向agentic-engineering演进
人工智能·笔记·python·prompt
九硕智慧建筑一体化厂家11 小时前
直流照明|无尘风淋室照明,高均匀无频闪,适配洁净车间高频合规工况
大数据·人工智能·笔记·智慧城市
LATASA11 小时前
【 从0到1构建 Agent Harness学习笔记】
网络·笔记·学习
weixin_4316004411 小时前
做 Agent 会用到的 Node API(3):异步与流
前端·学习·ai·agent·ai编程
FakeOccupational11 小时前
【电路笔记 仿真】SPICE仿真器软件 LTspice:绘制简单电路(新建图页+添加组件)并仿真+模型导入+SUBCKT (子电路)绘制与使用+特殊器件绘制
笔记
70asunflower12 小时前
Triton 从 0 到 1 完整学习教程
学习·triton
天国梦12 小时前
2026年英语教学数字化工具深度测评:天学网、腾讯英语君、翼课网横向对比
人工智能·学习
是上好佳佳佳呀12 小时前
【深度学习|Day01】PyTorch 深度学习笔记(上):框架认知与张量基础
pytorch·笔记·深度学习
x173880627313 小时前
目录遍历漏洞
笔记·目录遍历漏洞