20. S7-200系列PLC的寻址方式

117 阅读6分钟

S7-200系列PLC的寻址方式

S7-200的寻址方式主要分为三种:立即寻址、直接寻址和间接寻址。其中,直接寻址是最常用、最基本的寻址方式。


1. 立即寻址

这是最简单的一种寻址方式。指令的操作数(数据)直接在指令中给出,是一个明确的常数。

  • 特点:数据本身(常量)包含在指令操作码中。
  • 格式:通常以 #开头或直接书写数值,但在S7-200的指令中,通常直接书写常数。
  • 示例:MOVW 16#1234, VW100// 将十六进制常数 1234传送到VW100中。SET指令虽然不带操作数,但其功能是立即使逻辑结果置位。MOVB 100, VB10// 将十进制常数 100传送到VB10中。

2. 直接寻址(最常用)

这是最核心的寻址方式。指令的操作数是PLC存储区的地址。程序直接使用这个地址来访问数据。

直接寻址的核心在于掌握S7-200的存储区划分和地址格式。

存储区分类:

S7-200将存储器划分为几个不同的区域,每个区域有特定的功能:

存储区符号名称与功能位寻址举例字节/字/双字寻址举例
I输入映像寄存器。物理输入点的状态映射区,在每个扫描周期的开始阶段刷新。I0.0, I1.5IB0, IW0, ID0
Q输出映像寄存器。物理输出点的状态映射区,在每个扫描周期的结束阶段刷新到实际输出点。Q0.0, Q0.7QB0, QW0, QD0
M位存储器(中间继电器)。在程序内部用于存储中间结果的位存储器。M0.0, M10.1MB10, MW20, MD30
V变量存储器。功能最强大的存储区,可以按位、字节、字、双字访问,用于存储程序中的各种变量和数据。V100.0VB100, VW100, VD100
SM特殊存储器。用于提供PLC状态信息,并控制PLC的特殊功能(如首次扫描脉冲、模拟电位器值等)。只读居多。SM0.1(首次扫描ON)SMB5, SMW22
S顺序控制继电器。通常与顺序控制继电器指令(SCR)配合使用,用于组织顺序控制程序的步。S0.0, S2.1
T定时器。访问定时器的当前值和位状态。T37(定时器位)T37(当前值,字)
C计数器。访问计数器的当前值和位状态。C0(计数器位)C0(当前值,字)
AI模拟量输入。用于读取模拟量扩展模块的输入值。只能进行字读取。AIW0, AIW2
AQ模拟量输出。用于向模拟量扩展模块写入输出值。只能进行字写入。AQW0, AQW2
L局部变量存储器。用于存储临时数据,仅在创建它的程序块(如子程序)中有效。L0.0LB0, LW0, LD0
HC高速计数器。用于累计比PLC扫描周期更快的脉冲。只能进行双字读取。HC0, HC1(32位)
AC累加器。用于执行指令时暂存数据的寄存器,可以像字节、字、双字一样使用。AC0, AC1, AC2, AC3

地址格式:

直接寻址的地址由两部分组成:区域标识符 + 地址编号。

  • 位寻址: 访问一个布尔量(Bit),即开关量(0/1)。格式: [区域标识符] [字节地址] . [位地址]示例:I0.1: 输入字节0的第1位。Q1.5: 输出字节1的第5位。V10.2: 变量存储区字节10的第2位。
  • 字节、字、双字寻址: 访问8位、16位、32位的数据。格式: [区域标识符] [数据大小] [起始字节地址]数据大小标识符:B(Byte,字节): 8位,如 VB100W(Word,字): 16位,如 VW100(由VB100和VB101组成,VB100为高字节)D(Double Word,双字): 32位,如 VD100(由VB100到VB103组成,VB100为最高字节)示例:VB100: 变量存储区的第100个字节。VW100: 变量存储区从第100个字节开始的一个字(包含VB100和VB101)。VD100: 变量存储区从第100个字节开始的一个双字(包含VB100, VB101, VB102, VB103)。

重要提示: 字节、字、双字的地址是重叠的。例如,如果你向 VD100写入一个数据,它会覆盖 VW100, VW102, VB100, VB101, VB102, VB103中的所有数据。编程时需特别注意避免地址重叠冲突。


3. 间接寻址

间接寻址是指指令的操作数不是数据的直接地址,而是一个指向该地址的指针。指针本身存储在另一个存储单元中。这为处理数据表、数组等连续数据提供了极大的灵活性。

在S7-200中,间接寻址主要通过指针来实现。

实现步骤:

  1. 创建指针: 将一个存储区的地址移动到指针变量中。指针必须是双字(DWord)类型。为了表示这是一个地址,需要在地址前加上 &符号(“取地址”符号)。MOVD &VB200, VD500// 将VB200的地址(而不是VB200中的值)存入VD500中。现在VD500就是一个指针,它指向VB200。
  2. 使用指针间接寻址: 在指令中,通过在指针前加 *符号(“间接寻址”符号)来访问指针所指向地址中的数据。MOVW *VD500, VW300// 将指针VD500所指向的地址(即VB200)中的字数据(即VW200),传送到VW300中。
  3. 修改指针: 通过数学运算(如加法指令INC)可以改变指针的值,从而访问相邻的数据,这在遍历数组时非常有用。MOVD &VB200, AC1// 将VB200的地址存入累加器AC1。MOVW *AC1, VW300// 将AC1指向的地址(VB200)中的数据(VW200)送到VW300。+I 2, AC1// 将AC1中的地址值增加2个字节(因为下一个字数据在2个字节之后)。MOVW *AC1, VW302// 现在AC1指向VB202,将VW202送到VW302。

注意:

  • 只能使用 VD, LD, AC作为指针的存储单元。
  • 不能对位地址(如I、Q、M的位)进行间接寻址。
  • 确保指针指向的地址是有效的,否则可能导致运行时错误。

总结

寻址方式含义优点缺点适用场景
立即寻址操作数是常数本身简单、直接数据固定,不灵活设置固定参数,如定时器预设值、比较常数等
直接寻址操作数是数据的直接地址最常用、直观、易于理解处理数据块时不灵活绝大多数PLC逻辑控制程序
间接寻址操作数是一个指向数据地址的指针非常灵活,适合处理批量数据复杂,容易出错数据块移动、查找表、配方处理、循环操作等