潍坊乾发机电有限公司
 
 
新闻资讯
当前位置:首页 >> 新闻资讯 >> 行业新闻

西门子间接寻址

浏览:12    发布日期:2026-04-24

间接寻址是西门子PLC编程中核心的寻址方式,核心定义是:不直接指定指令的操作数地址,而是通过指针(Pointer)存储目标地址的编号,再通过指针间接调用对应存储区的数据,实现“灵活调用、批量操作、动态切换”的需求,适配S7-200 SMART、S7-300/400、S7-1200/1500全系列机型,是复杂逻辑编程(如批量数据处理、多工位控制)的必备技能。

相较于直接寻址(如A I0.0、L DB1.DBW0,直接指定具体地址),间接寻址的核心优势的是“地址可动态切换”——无需修改程序,仅通过修改指针的数值,即可调用不同地址的数据,大幅简化批量操作编程,减少程序冗余,同时提升程序的灵活性和可维护性。寻址的本质是指定指令操作数的地址,间接寻址则是通过指针间接给出这一地址,而非直接标注确切地址。

一、核心概念(必懂基础)

1. 指针(Pointer)

指针是间接寻址的核心,本质是一个存储“目标地址编号”的存储单元,西门子PLC中指针分为两种格式,适配不同寻址场景:

  • 双字指针(32位):最常用格式,由“字节编号(3~18位,0~65535)+ 位编号(0~2位,0~7)”组成,可精准定位到具体的位地址(如I10.2、Q5.7),适配所有存储区的寻址需求,其32位结构中,0~2位指示位编号,3~18位指示字节编号,剩余位可忽略或用于区域标识。

补充:指针的存储区域有明确限制,如S7-200 SMART中,仅V存储单元、L存储单元或累加器(AC1、AC2、AC3)可作为指针,且指针以双字形式存储目标地址。

2. 核心存储区适配

间接寻址可适配西门子PLC所有常用存储区,不同存储区的寻址格式略有差异,核心适配如下(覆盖全机型):

  • 输入区(I)/输出区(Q):如通过指针调用I区、Q区的位/字节/字数据,适配开关量、模拟量的动态调用。

  • 位存储区(M):最常用的指针存储区域,也可通过指针间接调用M区数据,用于中间逻辑过渡。

  • 数据块(DB):含共享数据块(DB)和背景数据块(DI),是间接寻址的核心应用场景(如批量调用DB块内的工艺参数),可通过指针调用DB块的字节、字、双字数据,部分机型需先打开DB块再进行寻址操作。

  • 定时器(T)/计数器(C):通过指针调用不同编号的定时器、计数器,实现多定时器/计数器的动态切换,无需重复编写控制逻辑。

  • 本地数据区(L):仅在功能块(FB/FC)内部使用,可通过指针调用块内本地数据,提升块内逻辑的灵活性。

二、间接寻址的核心分类(按机型适配)

西门子不同系列PLC的间接寻址方式略有差异,核心分为两大类型,对应不同机型,实操中需按需选择,避免混淆:

类型1:存储器间接寻址(全机型通用)

最基础、最常用的间接寻址方式,核心是“用存储单元作为指针”,直接存储目标地址的编号,无需专用寄存器,适配S7-200 SMART、S7-300/400、S7-1200/1500全系列,分为单字指针和双字指针两种应用场景,与直接寻址的核心区别的是通过指针间接指明操作地址,而非直接标注确切地址。

实操示例(以S7-300为例,双字指针)

需求:用MD10(双字指针)存储目标地址编号,间接调用I区输入信号,控制Q区输出。

// 1. 给指针赋值(指定目标地址:I10.2)
L P#10.2        // 加载指针,指向I10.2(字节10,位2)
T MD10          // 将指针存入MD10(双字指针存储区)

// 2. 间接寻址调用I10.2,控制Q0.0输出
A I(MD10)       // 间接调用MD10指向的I区地址(I10.2)
= Q0.0          // 若I10.2为1,Q0.0输出1

关键说明:单字指针仅适用于非位地址(如DB10.DBW0、T5),格式为“L 10;T MW10;L DB(MW10).DBW0”,即通过单字指针MW10存储DB块编号,间接调用对应DB块的字数据;双字指针可精准定位到位地址,是实操中最常用的指针格式,使用时需确保指针的位编号范围为0~7,字节编号范围符合存储区限制。

类型2:寄存器间接寻址(S7-300/400专属)

核心是使用PLC内部的地址寄存器AR1、AR2(32位)作为指针,专门用于复杂逻辑(如多数据块批量调用、跨区域寻址),需通过专用指令操作寄存器,地址寄存器AR1、AR2均为32位,可存储区域内或跨区域指针,适配S7-300/400的复杂编程场景,S7-1200/1500、S7-200 SMART无此寄存器,无需考虑。

核心操作指令(必记)

  • LAR1/LAR2:将指针加载到地址寄存器(如LAR1 P#5.0,将指针P#5.0加载到AR1);

  • TAR1/TAR2:将地址寄存器的指针存储到目标存储区(如TAR1 MD20,将AR1的指针存入MD20);

  • CAR:交换AR1和AR2的指针内容,用于快速切换两个指针指向的地址。

实操示例(跨数据块间接寻址)

// 1. 加载指针到AR1(指向DB10.DBW0)
L P#DB10.DBW0   // 指针指向共享数据块DB10的字数据DBW0
LAR1            // 将指针加载到AR1

// 2. 间接调用DB10.DBW0,赋值给MW30
L DB[AR1,P#0.0].DBW0  // 调用AR1指向的DB块字数据(无偏移)
T MW30                // 赋值给MW30

// 3. 偏移寻址(调用DB10.DBW2)
L DB[AR1,P#2.0].DBW0  // 指针偏移2字节,指向DB10.DBW2
T MW32                // 赋值给MW32

关键说明:寄存器间接寻址支持“指针偏移”(如P#2.0),可实现连续地址的批量调用,大幅提升复杂逻辑的编程效率;地址寄存器的指针分为区域内指针和跨区域指针,区域内指针仅指向单一存储区,跨区域指针可指向不同存储区,需通过区域标识符区分(如I、Q、M、DB),区域标识符有对应的二进制和十六进制代码,可提前预设到指针中。

类型3:S7-1200/1500专属间接寻址(TIA博途环境)

S7-1200/1500无AR1/AR2寄存器,采用“符号寻址+指针指令”结合的方式,核心通过PEEK/POKE系列指令实现间接寻址,操作更简洁,适配TIA博途软件的图形化编程,同时支持SCL语言编程,可通过专用指令实现变量和DB块的间接访问,与传统机型的寻址逻辑一致,但指令格式略有差异。

核心指令(必用)

  • PEEK_BOOL/PEEK_BYTE/PEEK_WORD/PEEK_DWORD:读取指定指针指向的布尔值/字节/字/双字数据;

  • POKE_BOOL/POKE_BYTE/POKE_WORD/POKE_DWORD:向指定指针指向的地址写入对应类型数据;

  • POKE_BLK:批量写入数据,适用于批量间接寻址场景,可实现数据块的批量复制和调用,与S7-300/400的批量寻址逻辑一致,但指令格式更适配TIA博途环境。

实操示例(S7-1200,PEEK指令间接读取DB块数据)

// 需求:通过指针DB10.DBW0(存储DB块编号),间接读取对应DB块的DBW2数据
VAR
    DB_Num: WORD := 5;    // 指针:目标DB块编号(DB5)
    Data: WORD;           // 存储间接读取的数据
END_VAR

// 间接读取DB5.DBW2的数据,存入Data
Data := PEEK_WORD(area := 16#84, // 区域代码:DB块(16#84对应DB存储区)
                  dbNumber := DB_Num,
                  byteOffset := 2); // 偏移量:DBW2(字节偏移2)

补充:S7-200 SMART的间接寻址与S7-1200/1500类似,核心通过“&地址”获取指针,“*指针”调用数据,无需专用寄存器,指针仅可存储在指定区域,且不可用于访问单个位或HC、L等特殊存储区,修改指针值时需根据访问数据的大小调整指针偏移量(字节+1、字+2、双字+4)。

三、全机型通用实操步骤(以“批量调用DB块数据”为例)

需求:通过间接寻址,批量读取DB1~DB5的DBW0数据,存入MW10~MW18(每块数据对应一个MW存储区),适配所有机型,核心逻辑一致,仅指令格式略有差异。

  1. 定义指针:选择对应机型的指针存储区(如S7-300用MD10,S7-1200用DB10.DBW0,S7-200 SMART用VW10),用于存储目标DB块编号(1~5)。

  2. 指针赋值:通过程序给指针赋初始值(如1),后续通过自增指令(如INC_W)实现指针递增,对应DB块编号递增,实现批量调用。

  3. 间接寻址调用:根据机型选择对应指令,调用指针指向的DB块数据,如S7-300用寄存器间接寻址,S7-1200用PEEK指令,S7-200 SMART用“*指针”调用。

  4. 循环控制:添加循环指令(如FOR循环),设置循环次数(5次),实现DB1~DB5数据的批量读取,避免重复编写调用指令,提升编程效率。

  5. 结果存储:将每次读取的数据存入对应MW存储区,循环结束后完成批量数据调用,可添加判断逻辑,确保指针不超出目标范围(如DB块编号1~5)。

关键补充:不同机型的指令格式可灵活调整,但核心逻辑一致——通过指针动态指向目标地址,批量调用数据;实操中可根据机型选择对应的指针格式和指令,无需修改核心逻辑。


返回列表
Copyright © 2026 潍坊乾发机电有限公司 XML