西门子S7-300/400PLC的寻址方式
时间:2023-03-19来源:佚名
西门子S7-300/400plc的直接寻址方法与S7-200相同。间接寻址方式有“存储器间接寻址”与“寄存器间接寻址”两种。由于S7-300/400具有专用的指针寄存器AR1、AR2,因此,间接寻址建立“地址指针”的方法与指令的表示方法、寻址的范围均与S7-200 PLC有较大的区别,其使用更方便,寻址的范围也更大。 1.存储器间接寻址 S7-300/400的存储器间接寻址方式与S7-200 PLC相比,在实际使用中具有两方面明显的区别: ①在S7-300/400中,间接寻址不需要建立指针的过程,可以直接在寻址对象的前面加“【]”标记,表示该寻址对象为间接寻址。 ②间接寻址可以用于二进制位地址。 【例1】通过局部变量LD10,将输入I22.2读入,与IO.O进行“与”运算,结果输出到QO.1的程序如下: LP#22.2 //二进制位数据22.2读入累加器; TLD10 //二进制位数据22.2传送到局部变量LD1O中: AI[LDIO] //读入由LDIO确定的输入点; AIO.O //与IO.O进行“与”运算; =QO,l //结果输出到QO.1 以上指令等效于指令: AI22.2 AIO.O =QO.1 2.寄存器间接寻址 S7-300/400的寄存器间接寻址是一种利用指针寄存器进行偏移的间接寻址方式,格式为[AR1,m]或[AR2,m],间接寻址所指定的存储器地址为指针寄存器AR1或AR2的内容与m之和。 指针寄存器AR1或AR2为双字长寄存器,可以同时存储地址、字节、位等信息,因此,寻址不仅可以在存储器自身的区域内进行(如内部标志M之间、输入I之间等),而且可以在不同的区域内进行(如由内部标志M到输入I等)。 寄存器各位所代表的含义如下: 地址位(bit31):“0”指针寄存器不含地址符,地址符bit24~bit26应为0: “1”指针寄存器含地址符,地址符由bit24~bit26指定。 地址符(bit24~bit26):地址位(bit31)为“1”时用于指定存储器地址,地址的编码如下: 000:地址P: 001:地址I; 010:地址Q; 011:地址M; 100:地址DBX; 101:地址DIX; 111:地址L。 字节编号(bit18~bit3):指定存储器的字节地址,范围为0~65535。 位编号(bit2~bit0):指定存储器的位地址,范围为0~7。 指针寄存器可以不含地址符,此时,指针寄存器只需要写入二进制的字节与位数据,地址由逻辑运算指令指定。 【例2】通过指针寄存器偏移二进制位22.2后,将I32.3读入,与IO.O进行“与”运算,结果输出到QO.1的程序如下: LP#22.2 ∥二进制位数据22.2读入累加器1: LARI //累加器l的内容读入指针寄存器ARl: AI[ARl,P#10.1] //将二进制位数据10.1与指针寄存器ARI内容相加,进行间接寻址: AIO.O //与IO.O进行“与”运算: QO.1 //结果输出到QO.1; 以上指令等效于指令: AI32.3 AIO.O =QO.1 在使用二进制位数据时应注意,开关量输入/输出的单位为字节,因此,进行指针寄存器偏移时应利用8进制数进行计算。 【例3】通过指针寄存器偏移二进制位数据10.5后,将I21.4读入,与IO.O进行“与”运算,结果输出到QO.1的程序如下: LP#10.5 ,/将二进制位数据10.5读入累加器1: LARI //将累加器l的内容写入指针寄存器ARl; AI[ARI, P#10.7] //将二进制位数据10.7与指针寄存器ARI内容相加,进行间接寻址; AIO.O ∥与IO.O进行“与”运算; =QO.I //结果输出到QO.1: 以上指令等效于指令: AI21.4 AIO.O =QO.l 指针寄存器可以含地址符,此时,指针寄存器需要同时写入地址、二进制的字节与位数据,逻辑运算指令不再需要指定地址。 【例4]将M6.0作为地址指针,将输入IW10的内容写入到MW56中的程序如下: L P#M6.0 //将地址数据M6.0读入累加器l; ’ L AR1 ∥将累加器l的内容写入指针寄存器ARI; L IWIO //将IWIO的内容读入累加器1: T W[ARI,P#50.0】 /将累加器l的内容写入到MW56(目标地址利用间接寻址方式) 由于本例属于存储器区域内部寻址,且指针寄存器已经包含了地址M,逻辑运算指令不再需要指定地址。以上指令等效于指令: LIW10 TMW56 |