寻址就是指定指令要进行操作的地址。S7-200中有两种寻址方式:直接寻址和间接寻址。
1.直接寻址
S7-200将信息存于不同的存储单元,每一个单元都有唯一的地址,可以明确指岀要存取的存储器地址,这就允许用户程序直接存取这个信息。表3-5列出了不同长度的数据所能表示的数值范围。
若要存取存储区的某一位,则必须指定地址,包括存储器标识符、字节地址和位号。图3-6是一个位寻址的例子(又称“字节.位寻址”),在这个例子中,存储区、字节地址(I代表输入,3代表字节3)和位地址(第4位)之间用点号“.”相隔开。
图3-6 字节.位寻址
使用这种字节寻址方式,可以按照字节、字或双字来存取许多存储区(V、I、Q、M、S、L及SM)中的数据,若要存取CPU中的一个字节、字或双字数据,则必须以类似位寻址的方式给出地址,包括存储器标识符、数据大小,以及该字节、字或双字的起始字节地址,如图3-7所示。
图3-7 对同一地址进行字节、字和双字存取操作的比较
其他CPU存储区(如T、C、HC和累加器)中存取数据使用的地址格式包括区域标识符和设备号。
(1)输入过程映像寄存器:I。
在每次扫描周期的开始,CPU对物理输入点进行采样,并将采样值写入输入过程映像寄存器中,可以按位、字节、字或双字存取输入过程映像寄存器中的数据。
位: I[字节地址].[位地址] I1.1
字节、字或双字:I[长度][起始字节地址] IB4
(2)输出过程映像寄存器:Q。
在每次扫描周期的结尾,CPU将输出过程中控制映像寄存器中的数据复制到物理输出点上,可以按位、字节、字或双字来存取输出过程映像寄存器中的数据。
位: Q[字节地址].[位地址] Q1.1
字节、字或双字:Q[长度][起始字节地址] QB5
(3)变量存储区:V。
可以用V存储器区存储程序执行过程中控制逻辑操作的中间结果,也可以用它来保存与工序或任务相关的其他数据,并且可以按位、字节、字或双字来存取V存取区中的数据。
位: V[字节地址].[位地址] V10.2
字节、字或双字:V[长度][起始字节地址] VW100
(4)位存储区:M。
可以用位存储区作为控制继电器来存储中间状态和控制信息,可以按位、字节、字或双字来存取位存储区。
位: M[字节地址].[位地址] M26.7
字节、字或双字:M[长度][起始字节地址] MD20
(5)定时器存储区:T。
在S7-200CPU中,定时器可用于时间累计,其分辨率(时基增量)分别为1 ms、10 ms和100 ms三种,定时器有两种形式:
① 当前值:16位有符号整数,存储定时器所累计的时间。
② 定时器位:按照当前值和预置值的比较结果置位或者复位,预置值是定时器指令的一部分。
可以用定时器地址(T+定时器号)来存取这两种形式的定时器数据,究竟使用哪种形式,取决于所使用的指令。如果使用位操作指令则存取定时器位,如果使用字操作指令则存取定时器当前值。如图3-8所示,常开触点指令存取定时器位,而字移动指令则存取定时器的当前值。
图3-8 存取定时器位或者定时器的当前值
(6)计数器存储器:C。
在 S7-200 CPU中,计数器可以用于累计其输入端脉冲电平由低到高的次数,CPU提供了3种类型的计数器:一种只能增计数;另一种只能减计数;还有一种既可以增计数,又可以减计数。计数器有两种形式:
① 当前值:16位有符号整数,存储累计值。
② 计数器位:按照当前值和预置值的比较结果置位或者复位,预置值是计数器指令的一部分。
可以用计数器地址(C+计数器号)来存取这两种形式的计数器数据,究竟使用哪种形式取决于所使用的指令。如果使用位操作指令则存取计数器位;如果使用字操作指令,则存取计数器当前值。如图3-9所示,常开触点指令存取计数器位,而字移动指令则存取计数器的当前值。
图3-9 存取计数器位或者计数器的当前值(www.daowen.com)
(7)高速计数器:HC。
高速计数器对高速时间计数,它独立于CPU的扫描周期,高速计数器有一个32位的有符号整数计数器(或当前值),若要存取高速计数器中的值,则应给出高速计数器的地址,即存储器类型(HC)加上计数器号(如HC0),高速计数器的当前值只是读取数据,仅可以作为双字(32位)来寻址。
格式:HC[高速计数器号]HC1。
(8)累加器:AC。
累加器可以像存储器一样使用读/写设备,如用它来向子程序传递参数,也可以从子程序返回参数,以及用来存储计算的中间结果。S7-200提供了4个32位累加器(AC0、AC1、AC2和AC3),并且可以按字节、字或双字的形式来存取累加器中的数值。
被访问的数据长度取决于存取累加器时所使用的指令,如图 3-10所示,当以字节或字 的形式存取累加器时,使用的是数据的低8位或低16位;当以双字的形式存取累加器时,使用全部32位。
图3-10 存取累加器
(9)特殊存储器:SM。
SM位为 CPU和用户程序之间传递信息提供了一种手段,可以用这些位选择和控制S7-200 CPU的一些特殊功能。例如,首次扫描标志位,按照固定频率开关的标志位或者显示数学运算或操作指令状态的标志位。可以按位、字节、字或双字来存取SM位。
位: SM[字节地址].[位地址] SM0.1
字节、字或双字:SM[长度][起始字节地址] SMB86
(10)局部寄存器:L。
在S7-200 CPU中有64个字节的局部存储器,其中,60个可以用作临时存储器或者给子程序作传递参数。
注意:如果用梯形图或者功能块图编辑,STEP 7-Micro/WIN保留这些局部存储器的最后4个字节。
S7-200 PLC给主程序分配了64个局部存储器,给每一个子程序嵌套分配了64个字节局部存储器,给中断服务程序分配了64个字节局部存储器。
子程序或者中断服务程序不能访问分配给主程序的局部存储器,子程序不能访问分配给主程序、中断服务程序或者其他子程序的局部存储器。同样地,中断服务程序也不能访问分配给主程序或子程序的局部存储器。
S7-200根据需要分配局部存储器,也就是说,当主程序执行时,分配给子程序或中断服务程序的局部存储器是不存在的。当发生中断或者调用一个子程序时,需要分配局部存储器,新的局部存储器在分配时可以重新使用分配给另一个子程序或中断服务程序的局部存储器。
局部存储器在分配时 PLC不进行初始化,初值可能是任意的,当在子程序调用中传递参数时,在被调用子程序的局部存储器中,由 CPU替换其被传递的参数的值,局部存储器在参数传递的过程中不传递值,在分配时不被初始化,也没有任何数值。
位: L[字节地址].[位地址] L0.0
字节、字或双字:L[长度][起始字节地址] LB33
(11)模拟量输入:AI。
S7-200将模拟量值(如温度、电压)转换成1个字长(16位)的数字量,可以用区域标识符(AI)、数据长度(W)及字节的起始地址来存取这些值。因为模拟输入量为 1个字长,且从偶数位字节(如0、2、4)开始,所以必须用偶字节地址(如AIW0、AIW2、AIW4)来存取这些值,模拟量输入值为只读数据。
格式: AIW[起始字节地址] AIW4
(12)模拟量输出:AQ。
S7-200把1个字长(16位)的数字量按比例转换为电流或电压,可以用区域标识符(AQ)、数据长度(W)及字节的起始地址来改变这些值,因为模拟量为 1个字长,且从偶数位字节(如 0、2、4)开始,所以必须用偶字节地址(如AQW0、AQW2、AQW4)来改变这些值,模拟量输出值为只写数据。
格式: AQW[起始字节地址] AQW4
(13)顺控继电器存储器:S。
顺控继电器位 S用于组织机器操作或者进入等效程序段的步骤,SCR提供控制程序的逻辑分段,可以按位、字节、字或双字来存取S位。
位: S[字节地址].[位地址] S3.1
字节、字或双字:S[长度][起始字节地址] SB3
2.间接寻址
间接寻址是指用指针来访问存储区数据,指针以双字的形式存储其他存储区的地址,只能用V存储器、L存储器或者累加器存储器(AC1、AC2、AC3)作为指针。要建立一个指针,必须以双字的形式,将需要间接寻址的存储器地址移动到指针中,指针也可以为子程序传递参数。
S7-200允许指针访问以下存储区:I、Q、V、M、S、AI、AQ、SM、T(仅限于当前值)和C(仅限于当前值),无法用间接寻址的方式访问位地址,也不能访问HC或者L存储区。
要使用间接寻址,应该用“&”符号加上要访问的存储区域地址来建立一个指针指令的输入操作数,而不是将其内容移动到指令的输岀操作数(指针)中。
当指令中的操作数是指针时,应该在操作数前面加上“*”号,如图3-11所示,输入“*AC1”指定AC1是一个指针,MOVW指令决定了指针指向的是一个字长的数据,在本例中,存储在VB200和VB201中的数据被移动到累加器AC0中。
图3-11 创建和使用指针
如图3-12所示,可以改变一个指针的数值,由于指针是一个32位的数据,要用双字指令来改变指针的数值,简单的数学运算,如加法指令或者递增指令,可用于改变指针的数值。
图3-12 改变指针
注意:按照所访问的数据长度来使用不同的指令,当访问字节时,使用递增指令使指针加1;当访问字或者计数器、定时器的当前值时,用加法或者递增指令使指针加2;当访问双字时,使用加法或者递增指令使指针加4。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。