西门子 S7-200 PLC 的寻址方式

好的,针对西门子 S7-200 PLC 的寻址方式,我们来做一个系统、详细的详解。S7-200 的寻址方式清晰且经典,是理解其他西门子 PLC 寻址的基础。

核心概念

  1. 存储区:PLC 中用于存储不同功能数据的区域。
  2. 地址:数据在存储区中的具体位置。
  3. 数据类型:数据的大小和格式,决定了寻址的写法。

一、存储区标识符(关键字母)

这是寻址的第一个部分,指明数据存放在哪个区域。

区域标识符 区域名称 主要用途
I 输入映像寄存器 读取外部物理输入点(如按钮、传感器)的状态。通常只读
Q 输出映像寄存器 控制外部物理输出点(如继电器、指示灯)的状态。可读写
M 位存储器(中间继电器) PLC内部的通用辅助继电器,无物理对应点,用于程序中间逻辑。可读写
V 变量存储器 S7-200中最主要、最灵活的存储区,用于存储程序数据、中间结果等。可读写。
SM 特殊存储器 提供特定功能的位或字(如首次扫描位、脉冲、通信状态等)。部分只读。
S 顺序控制继电器 主要用于顺序控制(SCR)指令。
T 定时器 存储定时器当前值和状态位(TON, TOF, TONR)。
C 计数器 存储计数器当前值和状态位(CTU, CTD, CTUD)。
AI 模拟量输入 读取外部模拟量输入值(如0-10V, 4-20mA),只读字
AQ 模拟量输出 写入外部模拟量输出值,可写字
AC 累加器 高速读写寄存器(AC0-AC3),常用于数学运算、指针等。
HC 高速计数器 记录高速脉冲,只读双字
L 局部存储器 仅在调用它的程序块(子程序、中断程序)内有效。

二、直接寻址

直接寻址是直接给出数据所在的确切地址。其通用格式为:

区域标识符 + 数据大小标识 + 字节地址.位地址

1. 位寻址(Bit Addressing)

访问一个布尔量(1位)。

  • 格式区域标识 + 字节地址.位地址
  • 例子
    • I0.0:输入字节0的第0位。(第一个输入点)
    • Q1.2:输出字节1的第2位。
    • M3.7:位存储器M3字节的第7位。
    • V10.4:变量存储器V10字节的第4位。
    • SM0.1:特殊存储器SM0字节的第1位(此位是“首次扫描ON”位)。

2. 字节、字、双字寻址(Byte, Word, DWord Addressing)

访问一个连续的8位、16位或32位数据。

  • 数据大小标识
    • B (Byte):字节,8位,如 VB100
    • W (Word):字,16位(2字节),如 VW100
    • D (DWord):双字,32位(4字节),如 VD100
  • 关键规则
    • 地址必须是对齐的VW100VB100VB101 组成。VD100VB100VB101VB102VB103 组成。
    • 不要地址重叠:定义了 VW100 后,就不能再用 VB101 单独存放其他数据,因为它们重叠了。
  • 例子
    • VB20:变量存储器的第20个字节。
    • VW20:变量存储器的第20个字(包含 VB20VB21)。
    • VD20:变量存储器的第20个双字(包含 VB20VB21VB22VB23)。
    • MB10:位存储器的第10个字节。
    • T37:定时器T37的当前值(16位字,直接写T37即可)。
    • C10:计数器C10的当前值(16位字)。
    • AIW16:模拟量输入字16(如读取第一路模拟量输入)。
    • AQW30:模拟量输出字30。

3. 常数寻址

常数直接写在指令中,无需存储区地址。

  • 格式:根据进制不同
    • 二进制:2#1010_01102#开头)
    • 十进制:100-50 (常用)
    • 十六进制:16#ABCD16#F16#开头)
    • ASCII码:‘Text’ (单引号)
  • 例子
    • MOVW 16#0A0B, VW100 // 将十六进制常数 0A0B 传送到 VW100。
    • ADDW VW10, 100, VW20 // 将 VW10 的值加上常数 100,结果存到 VW20。

三、间接寻址(指针寻址)

间接寻址不是直接给出地址,而是通过一个指针(存放地址的变量) 来找到最终的数据地址。这是S7-200编程中比较高级但强大的技巧

  • 核心:用 * 号表示“取指针所指向地址中的值”。

  • 步骤

    1. 创建指针:指针必须是双字(DWord),使用 & 符号获取某个地址(如 &VB200),并将其存入一个双字地址(如 VD250AC1)。
    2. 使用指针:在指令中,通过 * 加上指针变量来访问数据。
    3. 修改指针:可以通过数学运算(如 +DINCD)改变指针的值,从而遍历数据。
  • 例子:使用指针访问连续的数据块

    // 1. 建立指针:将 VB200 的地址存入 AC1(累加器1)
    MOVD &VB200, AC1      // 现在 AC1 中存放的“值”是 VB200 的地址
    
    // 2. 通过指针写入数据
    MOVB 16#FF, *AC1     // 将 16#FF 写入 AC1 所指向的地址(即 VB200)
    
    // 3. 移动指针(增加1个字节)
    INCD AC1              // AC1 = AC1 + 1, 现在 AC1 指向 VB201
    
    // 4. 再次通过新指针写入数据
    MOVB 16#AA, *AC1     // 将 16#AA 写入 AC1 所指向的地址(即 VB201)
    

    执行后VB200 = 16#FFVB201 = 16#AA

  • 注意事项

    • 指针必须用双字(VDLDAC 等)。
    • 确保指针值指向合法的PLC存储区。
    • 常用于处理数组、循环、配方等需要灵活访问大量数据的场景。

四、常用地址举例与对比

地址写法 含义 数据类型
I0.1 数字量输入点,第0字节第1位。 位 (Bool)
Q1.5 数字量输出点,第1字节第5位。 位 (Bool)
VW100 变量存储区的一个字,包含 VB100(高8位)和 VB101(低8位)。 字 (Int)
VD500 变量存储区的一个双字,包含 VB500VB503 双字 (DInt/Real)
T37 定时器T37的当前值(16位整数)。 字 (Int)
C5 计数器C5的当前值(16位整数)。 字 (Int)
AIW0 第一个模拟量输入通道的数值(0-32000等)。 字 (Int)
AQW4 第二个模拟量输出通道的设定值。 字 (Int)
SM0.0 “常ON”位,在程序中始终为1。 位 (Bool)
SM0.1 “首次扫描ON”位,仅在程序第一次扫描时为1,常用于初始化。 位 (Bool)
S0.0 顺序控制继电器位。 位 (Bool)
*AC1 AC1累加器中存储的地址所指向的数据。 取决于上下文
&VB300 获取 VB300 的地址值,用于创建指针。 双字 (地址)

重要提醒与常见错误

  1. 地址重叠:使用了 VW100,又单独使用 VB101VD100,会导致数据混乱。
  2. 数据类型匹配:确保指令的数据类型与地址类型一致。例如,不能将 VW10(字)直接与 VB10(字节)相加。
  3. 断电保持M 区和 V 区都可以在系统块中设置为断电保持,但默认情况下 V 区保持的范围更大。
  4. 模拟量地址AIAQ 总是以字(W)为单位访问,没有位寻址。
  5. 间接寻址初始化:使用间接寻址前,务必确保指针已被正确赋值。

掌握以上寻址方式,你就能熟练地在 S7-200 PLC 中存取和操作数据,为编写复杂、高效的控制程序打下坚实基础。

posted @ 2025-12-09 14:19  dirgo  阅读(8)  评论(0)    收藏  举报